python3-configparser模块configparser
用于配置文件解析,可以解析特定格式的配置文件,此类文件格式为:xxx.ini
。在python3中,该模块名为configparser
,在python2中使用的模块名为ConfigParser
,configparser
是解析器,那么解析对象ini文件具有什么格式呢:ini
文件结构特点:
- 键值对可用=或者:进行分隔
section
(节点)的名字是区分大小写的,而key
的名字是不区分大小写的- 键值对头部和尾部的空白符会被去掉
- 值可以为多行
- 配置文件可以包含注释,注释以
#
或者;
为前缀
注意:configparser有default_section的概念,默认为[DEFAULT]
节,也就是之后所有的section都有该默认section中的键值对
下面我们用程序来创建一个ini文件:
>>> import configparser
>>> config = configparser.ConfigParser() # 创建对象
>>> config['DEFAULT'] = {
... 'ServerAliveInterval' : '60',
... 'Compression' : 'yes',
... 'CompressionLevel' : '6'}
>>> config['bitbucket.org'] = {}
>>> config['bitbucket.org']['User'] = 'hg'
>>> config['topsecret.server.com'] = {}
>>> topsecret['Port'] = '1080'
>>> topsecret['ForwardX11'] = 'no'
>>> config['DEFAULT']['ForwardX11'] = 'yes'
>>> with open('example.ini','w',encoding='utf-8') as configfile:
... config.write(configfile)
>>>
运行之后生成一个example.ini的配置文件内容如下:
[DEFAULT]
ServerAliveInterval = 60
Compression = yes
CompressionLevel = 6
ForwardX11 = yes
[bitbucket.org]
User = hg
[topsecret.server.com]
Port = 1080
ForwardX11 = no
我们对example.ini配置文件进行读取:
>>> import configparser
>>> config = configparser.ConfigParser()
>>> config.sections()
[]
>>> config.read('example.ini')
['example.ini']
>>> config.sections()
['bitbucket.org', 'topsecret.server.com']
>>> 'bitbucket.org' in config
True
>>> 'bytebong.com' in config
False
>>> config['bitbucket.org']['User']
'hg'
>>> config['DEFAULT']['Compression']
'yes'
>>> topsecret = config['topsecret.server.com']
>>> topsecret['ForwardX11']
'no'
>>> topsecret['Port']
'1080'
>>> for key in config['bitbucket.org']: print(key)
...
user
compressionlevel
serveraliveinterval
compression
forwardx11
>>> config['bitbucket.org']['ForwardX11']
'yes'
获取key值的方法除了列表之外,还可以通过section级别的get()方法获取,同时该函数可以指定默认值
>>> config['bitbucket.org'].get('User')
'hg'
>>> config['topsecret.server.com'].get('ForwardX11')
'no'
topsecret.get(‘CompressionLevel’)
‘6’
topsecret.get(‘Aipher’,’4des’)
‘4des’
而解析器级别的`get()`函数的默认值是通过`fallback`参数指定的:
``` bash
>>> config.get('bitbucket.org', 'monster',fallback='No such things as monster')
** 注意 ** 无论是通过列表方式获取值,还是通过get()
方法获取值,获取到的数据都是字符串类型的,如果想要获取指定类型的值,可以使用下面方法:
getint()
getfloat()
getboolean()
同时注意getboolean()
方法能判断True/False的值有:’yes’/‘no’,’on’/‘off’,’true’/‘false’ 和 ‘1’/‘0’
config.ini文件实例:
[section1]
name = cntsp
age = 18
[section2]
school : python-school
date : 2017-01-01
###文件格式说明###
[xxx] 代表节点
xx = xx 或者 xxx : xxx 代表键值对
>>> import configparser
>>> config = configparser.ConfigParser() # 常见对象
>>> config.read('config.ini',encoding='utf-8') # 读取配置文件,如果配置文件不存在,则创建
>>> secs = config.sections() # 获取所有节点名称
>>> print(secs)
['section1','section2']
>>> options = config.options('section1') # 获取指定节点的所有key
['name','age']
>>> item_list = config.items('section1') # 获取指定节点的键值对
>>> print(item_list)
[('name','cntsp'),('age','18')]
>>> val = config.getint('section1','age') # 获取指定节点指定key的value,由于age属性,所有我们选择了getint()方法。
18
>>> va2 = config.has_section('section1') # 检查指定节点是否存在,返回True或False
>>> print(va2)
True
>>> va3 = config.has_option('section1','age') # 检查指定节点中是否存在某个key,返回True或False
>>> print(va3)
True
>>> ###增删改
>>> config.add_section('node') # 添加一个新节点node,此时节点尚未写入文件
>>> config.write(open('config.ini','w',encoding='utf-8')) # 将添加的节点node写入配置文件
>>> config.remove_section('node') # 删除node节点,此时删除了内存中的节点node
>>> config.write(open('config.ini','w',encoding='utf-8')) # 将删除节点node后的文件内容回写到配置文件
>>> config.set('section1','key1','val1') # 在已经存在的节点中添加一个键值对key1 = val1,如果节点不存在则报错,如果key已经存在,则修改value值
>>> config.write(open('config.ini','w',encoding='utf-8'))
本文参考于
https://xin053.github.io/2016/07/18/configparser%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E8%A7%A3%E6%9E%90%E5%99%A8%E4%BD%BF%E7%94%A8%E8%AF%A6%E8%A7%A3/
http://www.cnblogs.com/wang-yc/p/5620944.html