Python ini 配置读取--configparser
2017-04-13
原创作品:首发u3v3, 转载请保留
地址:https://www.u3v3.com/ar/1312
作者ID:Yi_Zhi_Yu
首发日期:2017.4.13
Python学习群:278529278 (欢迎交流)
ini 文件
python下读取.ini
文件格式的配置, 可以使用configparser
这个包
一般.ini
的配置格式如下
[db];[section]
;option=value
host=127.0.0.1
port=3306
user=Yi_Zhi_Yu
pwd=xxxx
;
表示注释内容
以上标记出了不同部分的概念,
[db]
中括号里的的db
就表示一个section
host=127.0.0.1
则对应的是 option=value
了解这个, 我们对configparser的使用就更容易能看得懂了
configparser
下面我们来看看如何读取读取test.ini
文件配置, 配置内容
[db]
host=127.0.0.1
port=3306
user=Yi_Zhi_Yu
pwd=xxxx
if __name__ == '__main__':
cfger = configparser.ConfigParser()
cfger.read_file(open('test.ini'))
print(cfger.sections()) # ['db'] 输出的是sections
print(cfger.options('db')) # ['host', 'port', 'user', 'pwd'] 输出的是db 这个section下的options
print(cfger.get('db', 'host')) # 127.0.0.1 db下的host配置
结果如下
['db'] # sections
['host', 'port', 'user', 'pwd'] # options
127.0.0.1 # db.host
如果get
读取不存在的section
或者option
, configparser
会找默认的section
去查找有没有值,
默认的section的是default_section='DEFAULT'
, 在实例化configparser
时自定义
cfger = configparser.ConfigParser(default_section='default_section_name')
如果连default section
也读取不到结果, configparser
会抛出NoSectionError
或者NoOptionError
异常
多.ini文件继承的问题
很多情况下, 我们需要在某些文件中实现文件间的继承关系
比如, 多环境配置时, 有些配置时公用的, 有些是根据不同的环境区别配置的, 这个时候怎么做呢
这里我们有两个文件
common.ini # 公用配置
dev.ini # 开发环境配置
在common.ini
中的是通用配置, dev.ini
是开发环境的配置,
我们希望
common.ini
中的配置在不同环境中读取的都是一样的dev.ini
中是仅在开发环境能读取的配置dev.ini
能覆写common.ini
中的配置
common.ini
中的配置如下
[common]
project_name=Yi_Zhi_Yu
debug=0
dev.ini
中的配置如下
[common]
debug=1
[db]
host=127.0.0.1
port=3306
user=Yi_Zhi_Yu
pwd=xxxx
在dev
环境中, 我们覆写了debug
配置, 并新增了db
配置
配置读取如下
if __name__ == '__main__':
cfger = configparser.ConfigParser()
cfger.read_file(open('common.ini'))
cfger.read_file(open('dev.ini'))
print(cfger.sections()) # ['common', 'db']
print(cfger.options('common')) # ['project_name', 'debug']
print(cfger.options('db')) # ['host', 'port', 'user', 'pwd']
print(cfger.get('common', 'project_name')) # Yi_Zhi_Yu
print(cfger.get('common', 'debug')) # 1
print(cfger.get('db', 'host'))# 127.0.0.1
完整输出如下
['common', 'db'] # sections
['project_name', 'debug'] # common options
['host', 'port', 'user', 'pwd'] # db options
Yi_Zhi_Yu # common.project_name
1 # common.debug 注意这里的debug是被dev.ini覆写的debug值
127.0.0.1 # db.host
从上面的输出来看, 完全符合我们所需要的继承关系
注意, configparser
对多.ini
文件的解析非常依赖于read_file
的顺序, 后面添加的.ini
文件可以继承前面添加的.ini
文件的section
和option
或者 覆盖
, 所以请记住这点