ConfigParse 模块用以解析配置文件。模块中包含了一个 ConfigParse 类,一个 ConfigParse 对象可以同时解析多个配置文件,一般情况下,我们只会使用 ConfigParse 解析一个配置文件。
重要参数 allow_no_value
默认值为 False
,表示配置文件中是否允许选项没有值的情况。
示例 my.cnf
:
[client]
port = 3306
user = mysql
password = mysql
host = 127.0.0.1
[mysqld]
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
skip-external-locking
In [1]: import configparser
In [2]: cf = configparser.ConfigParser(allow_no_value=True)
In [3]: cf.read('my.cnf')
Out[3]: ['my.cnf']
读取配置文件,判断配置项相关的方法:
sections:返回一个所有章节的列表
In [4]: cf.sections() Out[4]: ['client', 'mysqld']
has_section:判断章节是否存在
In [5]: cf.has_section('client') Out[5]: True
items:以元祖形式返回所有选项
In [13]: for item in cf.items(): ...: print(item) ...: ('DEFAULT', <Section: DEFAULT>) ('client', <Section: client>) ('mysqld', <Section: mysqld>)
options:返回一个包含章节下所有选项的列表:
In [14]: cf.options('client') Out[14]: ['port', 'user', 'password', 'host']
has_option:判断某个选项是否存在
In [16]: cf.has_option('mysqld', 'tmpdir') Out[16]: True
get、getboolean、getint、getfloat:获取选项的值 ```python In [20]: cf.get(‘client’, ‘host’) Out[20]: ‘127.0.0.1’
In [21]: cf.getint(‘client’, ‘port’) Out[21]: 3306
<a name="2PEnu"></a>
## 修改配置文件方法
- remove_section:删除一个章节
In [27]: cf.remove_section(‘client’) Out[27]: True
- add_section:添加一个章节
In [28]: cf.add_section(‘mysql’)
In [29]: cf.sections() Out[29]: [‘mysqld’, ‘mysql’]
- remove_option:删除一个选项
In [30]: cf.remove_option(‘mysqld’, ‘datadir’) Out[30]: True
In [31]: cf.options(‘mysqld’) Out[31]: [‘basedir’, ‘tmpdir’, ‘skip-external-locking’]
- set:添加一个选项
In [32]: cf.set(‘mysql’, ‘port’, ‘3306’)
In [33]: cf.options(‘mysql’) Out[33]: [‘port’]
- write:将 ConfigParse 对象中的数据保存到文件中
In [34]: cf.write(open(‘my_copy.cnf’, ‘w’))
In [37]: ! cat my_copy.cnf [mysqld] basedir = /usr tmpdir = /tmp skip-external-locking
[mysql] port = 3306 ```