【安装】
ConfigParser 是解析配置文件的第三方库,需要安装 pip install ConfigParser
 
【介绍】
ConfigParser 是用来读取配置文件(可以是.conf, .txt, .init 等格式)的包。
配置文件的格式如下:中括号“[ ]”内包含的为section。 section 下面为为option, 类似于key-value 的配置内容。
如下,[ ]内包含的 db 和 concurrent 为 section, db_host 等为option
 
[db]
db_host = 127.0.0.1
db_port = 22
db_user = root
db_pass = rootroot
 
[concurrent]
thread = 10
processor = 20
 
注意: key = value 和 key:value 两种形式都可以
 
【常见函数】
-read(filename) 直接读取配置文件内容
-sections() 得到所有的section,并以列表的形式返回
-options(section) 得到该section的所有option
-items(section) 得到该section的所有键值对
-get(section,option) 得到section中option的值,返回为string类型
-getint(section,option) 得到section中option的值,返回为int类型,还有相应的getboolean()和getfloat() 函数。
 
【用法】
1. ConfigParser 初始工作
使用ConfigParser 首选需要初始化实例,并读取配置文件:
import ConfigParser
cf = ConfigParser.ConfigParser()
cf.read("配置文件名")
 
2. 获取所有sections。也就是将配置文件中所有“[ ]”读取到列表中:
s = cf.sections()
print 'section:', s
 
将输出(以下将均以简介中配置文件为例):section: ['db', 'concurrent']
 
3. 获取指定section 的options。即将配置文件某个section 内key 读取到列表中:
o = cf.options("db")
print 'options:', o
将输出:
options: ['db_host', 'db_port', 'db_user', 'db_pass']
 
4. 获取指定section 的所有配置信息。返回列表,列表的元素是key,value 组成的元组。 (用起来不方便)
v = cf.items("db")
print 'db:', v
将输出:
db: [('db_host', '127.0.0.1'), ('db_port', '22'), ('db_user', 'root'), ('db_pass', 'rootroot')]
 
5. 按照类型读取指定section 的option 信息。同样的还有getint、getfloat、getboolean。
#可以通过get(section,option)
db_host = cf.get("db", "db_host")
db_port = cf.getint("db", "db_port")
db_user = cf.get("db", "db_user")
db_pass = cf.get("db", "db_pass")
 
# 按照类型读取出来
threads = cf.getint("concurrent", "thread")
processors = cf.getint("concurrent", "processor") print "db_host:", db_host
print "db_port:", db_port
print "db_user:", db_user
print "db_pass:", db_pass
print "thread:", threads
print "processor:", processors
将输出:
db_host: 127.0.0.1
db_port: 22
db_user: root
db_pass: rootroot
thread: 10
processor: 20
 
注: 当查找不到指定的 section 或者 option 时,会抛出异常:
raise NoSectionError(section)
ConfigParser.NoSectionError: No section: 'dbs'
 
raise NoOptionError(option, section)
ConfigParser.NoOptionError: No option 'db_hosts' in section: 'db'
 
所以,在用 get(section,option) (getint,getfloat,getboolean 同) 时:
a. 要么包含在try...except 语句中,主动捕获异常
b. 要么先判断是否有该指定的 section 或 option:
if parser.has_section('section'): #判断 section 是否存在
dosomething
 
if parser.has_option('section','option'): #判断 option 是否存在
dosomething
 
6. 设置默认值 DEFAULT
如果配置文件中存在一个名为 DEFAULT (只能全部大写) 的 section,那么其他 section 会扩展它的 option 并且可以覆盖它的 option
 
[DEFAULT]
host = 127.0.0.1
port = 3306 [db_root]
user = root
pass = root
 
 
[db_huey]
host = 192.168.1.101
user = huey
pass = huey
 
print cp.get('db_root', 'host') # 127.0.0.1 print cp.get('db_huey', 'host') # 192.168.1.101
 
注意:当查询所有 sections 时, 显示只有两个, 即没有 DEFAULT 这个section
查询 section 里的options 时, 则多显示了两个, 即每个section 都会扩张 DEFAULT的 options
如 print parser.options('db_root')
则输出为 ['user ','pass','host','port']
 
=========================================================================================
封装成以字典返回的函数:
def configParser(config_file):
  parser = ConfigParser.ConfigParser()
  parser.read(config_file)
  config = {}
  for session in parser.sections(): #循环解析每一个section
    sessionValue = {} #把每一个section下对应的所有配置都存放到一个字典里
    for option in parser.options(session): #循环解析每一个section下的每一个option
      sessionValue[option] = parser.get(session, option).strip()
    config[session] = sessionValue #最后把所有的section(字典)再存放到一个大的字典里
  return config
print configParser('../config.txt')
print configParser('../config.txt').get('db').get('db_host')
 
输出:
{
'concurrent': {'processor': '20', 'thread': '10'},
'db': {'db_pass': 'rootroot', 'db_user': 'root', 'db_host': '127.0.0.1', 'db_port': '22'}
}
127.0.0.1
 

python ConfigParser 学习的更多相关文章

  1. 【目录】Python模块学习系列

    目录:Python模块学习笔记 1.Python模块学习 - Paramiko  - 主机管理 2.Python模块学习 - Fileinput - 读取文件 3.Python模块学习 - Confi ...

  2. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  3. 60分钟Python快速学习(给发哥一个交代)

    60分钟Python快速学习 之前和同事谈到Python,每次下班后跑步都是在听他说,例如Python属于“胶水语言啦”,属于“解释型语言啦!”,是“面向对象的语言啦!”,另外没有数据类型,逻辑全靠空 ...

  4. python爬虫学习(1) —— 从urllib说起

    0. 前言 如果你从来没有接触过爬虫,刚开始的时候可能会有些许吃力 因为我不会从头到尾把所有知识点都说一遍,很多文章主要是记录我自己写的一些爬虫 所以建议先学习一下cuiqingcai大神的 Pyth ...

  5. python爬虫学习 —— 总目录

    开篇 作为一个C党,接触python之后学习了爬虫. 和AC算法题的快感类似,从网络上爬取各种数据也很有意思. 准备写一系列文章,整理一下学习历程,也给后来者提供一点便利. 我是目录 听说你叫爬虫 - ...

  6. Python正则表达式学习摘要及资料

    摘要 在正则表达式中,如果直接给出字符,就是精确匹配. {m,n}? 对于前一个字符重复 m 到 n 次,并且取尽可能少的情况 在字符串'aaaaaa'中,a{2,4} 会匹配 4 个 a,但 a{2 ...

  7. python 线程学习

    彩照 一.学习[1] # -*- coding: utf-8 -*- import time import thread def timer(no, interval): cnt = 0 while ...

  8. Openstack python api 学习文档 api创建虚拟机

    Openstack python api 学习文档 转载请注明http://www.cnblogs.com/juandx/p/4953191.html 因为需要学习使用api接口调用openstack ...

  9. !!对python列表学习整理列表及数组详细介绍

    1.Python的数组分三种类型:(详细见 http://blog.sina.com.cn/s/blog_6b783cbd0100q2ba.html) (1) list 普通的链表,初始化后可以通过特 ...

随机推荐

  1. CF1062D Fun with Integers

    思路: 找规律. 实现: #include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { ...

  2. html的meta总结

    引子 之前的我的博客中对于meta有个介绍,例如:http://www.haorooms.com/post/liulanq_think_ie 浏览器安全性想到的这篇文章,中间介绍了meta下面IE的一 ...

  3. JS中的回收机制

    js的设计者为了让没有必要的变量保存在内存中,(我们写的任何变量都是需要内存空间的),什么叫没有必要的变量?也就是说你不在需要这个变量的时候它就会被销毁?那么你肯定会问js怎么知道那些变量是我们不需要 ...

  4. 一行JS搞定快速关机

    一.在本地新建一个文件js文件 JS代码: (new ActiveXObject("Shell.Application")).ShutdownWindows(); 二.设置快捷键 ...

  5. 自动完成文本框(AutoCompleteTextView与MultiAutoCompleteTextView)关联适配器

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...

  6. HDU 4291 A Short problem 短问题 (递推,找规律)

    题意: 给出递推式 g(n) = 3g(n - 1) + g(n - 2),且g(1) = 1,g(0) = 0.求g( g( g(n))) mod 109 + 7. 思路: 要求的g( g( g(n ...

  7. codevs 1553 互斥的数

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 有这样的一个集合,集合中的元素个数由给定的N决定,集合的元素为N个不同的正整数, ...

  8. C#入门(2)

    C#入门(2) Exception 基本异常的核心成员: System.Exception Property Meaning Data read-only,实现了IDirectory接口的一些键值对, ...

  9. angstromctf -No libc for You

    0x00 syscall syscall函数原型为: int syscall(int number, ...) 其中number是系统调用号,number后面应顺序接上该系统调用的所有参数.大概意思是 ...

  10. ios之UIImageView

    UIImageView,顾名思义,是用来放置图片的.使用Interface Builder设计界面时,当然可以直接将控件拖进去并设置相关属性,这就不说了,这里讲的是用代码. 1.创建一个UIImage ...