Python 读取配置文件

  • 原创
  • Madman
  • /
  • 2018-06-12 12:05
  • /
  • 0
  • 355 次阅读

Synopsis: Python3中使用 configparser.ConfigParser 模块来解析配置文件,在每个配置文件中,配置数据会被分组 section,每个分组又包括多个配置项 option 。可以使用 get 方法获取配置项的值,或使用 set 方法重新设置配置项的值

1. 配置文件的格式

配置文件(类似于Windows系统中的.ini配置文件)作为一种可读性很好的格式,非常适用于存储程序中的配置数据。在每个配置文件中,配置数据会被分组section,每个分组又包括多个配置项option

; config.ini  # ; 或 # 表示注释
; Sample configuration file

[installation]  # 这是配置分组或配置段,section
library=%(prefix)s/lib  # 这是该配置段下的配置项,option=value,或者option: value
include=%(prefix)s/include
bin=%(prefix)s/bin
prefix=/usr/local  # 可以使用变量,这里的prefix将会替换前面的配置项中的变量值,如library中的%(prefix)s

# Setting related to debug configuration
[debug]
log_errors=true
show_warnings=False

[server]
port: 8080
nworkers: 32
pid-file=/tmp/spam.pid
root=/www/root
signature:  # 配置项的值可以使用多行,解析后的字符串用\n拼接
    =================================
    Brought to you by the Python Cookbook
    =================================

2. configparser模块解析配置文件

Python3中使用configparser模块来解析配置文件,一般使用ConfigParser即可,详细说明请参考官方文档https://docs.python.org/3/library/configparser.html

In [1]: from configparser import ConfigParser

In [2]: config = ConfigParser()

In [3]: config
Out[3]: <configparser.ConfigParser at 0x7fc6656e7ef0>

In [4]: config.read('config.ini')
Out[4]: ['config.ini']

3. sections 和 options

3.1 查询

In [5]: config.sections()  # 列出所有配置段
Out[5]: ['installation', 'debug', 'server']

In [6]: config.options('debug')  # 列出指定配置段下的所有配置项
Out[6]: ['log_errors', 'show_warnings']

In [7]: config.get('debug', 'log_errors')  # 获取指定配置段下的配置项的值
Out[7]: 'true'

In [8]: config.getboolean('debug', 'log_errors')  # 返回配置项的布尔类型值
Out[8]: True

In [9]: config.getint('server', 'port')  # 返回配置项的整型值
Out[9]: 8080

注意:配置段的名称区分大小写,但配置项的名称不区分大小写

In [10]: config.get('installation','PREFIX')
Out[10]: '/usr/local'

In [11]: config.get('installation','prefix')
Out[11]: '/usr/local'

In [12]: config.options('debug')
Out[12]: ['log_errors', 'show_warnings']

In [13]: config.options('Debug')
---------------------------------------------------------------------------
NoSectionError                            Traceback (most recent call last)
<ipython-input-20-14492c65b416> in <module>()
----> 1 config.options('Debug')

/usr/local/python-3.6/lib/python3.6/configparser.py in options(self, section)
    673             opts = self._sections[section].copy()
    674         except KeyError:
--> 675             raise NoSectionError(section) from None
    676         opts.update(self._defaults)
    677         return list(opts.keys())

NoSectionError: No section: 'Debug'

3.2 修改

In [14]: config.set('server','port','9000')  # 修改配置项的值

In [15]: config.set('debug','log_errors','False')

In [16]: import sys

In [17]: config.write(sys.stdout)  # 将修改后的配置文件内容输出到屏幕
[installation]
library = %(prefix)s/lib
include = %(prefix)s/include
bin = %(prefix)s/bin
prefix = /usr/local

[debug]
log_errors = False
show_warnings = False

[server]
port = 9000
nworkers = 32
pid-file = /tmp/spam.pid
root = /www/root
signature = 
    =================================
    Brought to you by the Python Cookbook
    =================================


In [18]: 

4. 补充

ConfigParser可以读取多个配置文件然后合并相同配置段下的配置项,后读入的配置项会覆盖前面的值

再添加一个用户自定义的配置文件user_config.ini

; user_config.ini

[installation]
prefix=/etc/wangy

[debug]
log_errors=False

配置项prefixlog_errors会覆盖config.ini中的值:

In [1]: from configparser import ConfigParser

In [2]: config = ConfigParser()

In [3]: config.read('config.ini')  # 导入第一个配置文件
Out[3]: ['config.ini']

In [4]: config.get('installation', 'prefix')  # 显示第一个配置文件中的值
Out[4]: '/usr/local'

In [5]: config.read('user_config.ini')  # 导入第二个配置文件
Out[5]: ['user_config.ini']

In [6]: config.get('installation', 'prefix')  # 显示覆盖后的值
Out[6]: '/etc/wangy'

In [7]: config.getboolean('debug', 'log_errors')
Out[7]: False
分类: Python入门
标签: configparser
未经允许不得转载: LIFE & SHARE - 王颜公子 » Python 读取配置文件

分享

作者

作者头像

Madman

如果博文内容有误或其它任何问题,欢迎留言评论,我会尽快回复; 或者通过QQ、微信等联系我

0 条评论

暂时还没有评论.

发表评论前请先登录