Python 读取写入配置文件 ConfigParser
configparser 简介
python2 下该模块名为 ConfigParser,到 3 才改为 configparser,可以看官方 configparser 模块的说明
https://docs.python.org/3/library/configparser.html
ini 文件结构
https://docs.python.org/3/library/configparser.html#supported-ini-file-structure
ini 文件结构需要注意一下几点:
- 键值对可用
=
或者:
进行分隔 - section 的名字是区分大小写的,而 key 的名字是不区分大小写的
- 键值对中头部和尾部的空白符会被去掉
- 值可以为多行
- 配置文件可以包含注释,注释以
#
或者;
为前缀
不一定要以 ini 为扩展名。
基本使用
为了创建如下 ini 文件:
[DEFAULT]
ServerAliveInterval = 45
Compression = yes
CompressionLevel = 9
ForwardX11 = yes
[bitbucket.org]
User = hg
[topsecret.server.com]
Port = 50022
ForwardX11 = no
创建 ini 文件
>>> import configparser
>>> config = configparser.ConfigParser()
>>> config['DEFAULT'] = {'ServerAliveInterval': '45',
... 'Compression': 'yes',
... 'CompressionLevel': '9'}
>>> config['bitbucket.org'] = {}
>>> config['bitbucket.org']['User'] = 'hg'
>>> config['topsecret.server.com'] = {}
>>> topsecret = config['topsecret.server.com']
>>> topsecret['Port'] = '50022' # mutates the parser
>>> topsecret['ForwardX11'] = 'no' # same here
>>> config['DEFAULT']['ForwardX11'] = 'yes'
>>> with open('example.ini', 'w') as configfile:
... config.write(configfile)
...
读取 ini 文件
>>> 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']
'50022'
>>> for key in config['bitbucket.org']:
... print(key)
user
compressionlevel
serveraliveinterval
compression
forwardx11
>>> config['bitbucket.org']['ForwardX11']
'yes'
如果想要获取指定类型的数据,可以使用如下的几个方法:
- getint()
- getfloat()
- getboolean()
同时需要注意 getboolean() 方法能判断 True/False 的值有: 'yes'/'no'
, 'on'/'off'
, 'true'/'false'
和 '1'/'0'
。例如:
>>> topsecret.getboolean('ForwardX11')
False
>>> config['bitbucket.org'].getboolean('ForwardX11')
True
>>> config.getboolean('bitbucket.org', 'Compression')
True
默认值
>>> topsecret.get('Port')
'50022'
>>> topsecret.get('CompressionLevel') # 'DEFAULT' section 中默认值
'9'
>>> topsecret.get('Cipher')
>>> topsecret.get('Cipher', '3des-cbc') # 自行提供默认值
'3des-cbc'
>>> topsecret.get('CompressionLevel', '3') # 如果在 'DEFAULT' section 中存在,自行提供的无效
'9'
fallback 参数
解析器级别的 get() 方法
>>> config.get('bitbucket.org', 'monster', fallback='No such things as monsters')
'No such things as monsters'
fallback 参数 也可以和 getint(),getfloat(),getboolean() 方法一起使用:
>>> 'BatchMode' in topsecret
False
>>> topsecret.getboolean('BatchMode', fallback=True)
True
>>> config['DEFAULT']['BatchMode'] = 'no'
>>> topsecret.getboolean('BatchMode', fallback=True)
False
Interpolation
创建 ConfigParser() 类的时候可以指定 interpolation 参数,如果将 interpolation 设置为 BasicInterpolation(),则配置文件中的 %(key)s
结构会被解析,如,比如 example.ini 文件内容如下:
[Paths]
home_dir: /Users
my_dir: %(home_dir)s/lumberjack
my_pictures: %(my_dir)s/Pictures
>>> import configparser
>>> config = configparser.ConfigParser(interpolation=configparser.BasicInterpolation())
>>> config.read(r'F:\coding\python\example.ini')
['F:\\coding\\python\\example.ini']
>>> config['Paths']['my_dir']
'/Users/lumberjack'
可以看到 %(home_dir)s
被解析成了 /Users
,说白了,相当于配置文件中的变量
ExtendedInterpolation
创建 ConfigParser() 类的时候指定 interpolation 参数为 ExtendedInterpolation(),那么解析器会解析 ${section:key} 结构,那么上面的ini文件应该写成如下的格式:
[Paths]
home_dir: /Users
my_dir: ${home_dir}/lumberjack
my_pictures: ${my_dir}/Pictures
并且 ExtendedInterpolation() 也能解析更复杂的,像下面这样的 ini 文件:
[Common]
home_dir: /Users
library_dir: /Library
system_dir: /System
macports_dir: /opt/local
[Frameworks]
Python: 3.2
path: ${Common:system_dir}/Library/Frameworks/
[Arthur]
nickname: Two Sheds
last_name: Jackson
my_dir: ${Common:home_dir}/twosheds
my_pictures: ${my_dir}/Pictures
python_dir: ${Frameworks:path}/Python/Versions/${Frameworks:Python}
其他方法
- add_section(section)
- has_section(section)
- options(section)
- has_option(section, option)
- remove_option(section, option)
- remove_section(section)
都很常用,具体就不介绍了,看名字就知道是干什么的了
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 bin07280@qq.com
文章标题:Python 读取写入配置文件 ConfigParser
文章字数:1.1k
本文作者:Bin
发布时间:2018-09-02, 16:06:22
最后更新:2019-08-06, 00:07:35
原始链接:http://coolview.github.io/2018/09/02/Python/Python%20%E8%AF%BB%E5%8F%96%E5%86%99%E5%85%A5%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%20ConfigParser/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。