ConfigParse 模块用以解析配置文件。模块中包含了一个 ConfigParse 类,一个 ConfigParse 对象可以同时解析多个配置文件,一般情况下,我们只会使用 ConfigParse 解析一个配置文件。
重要参数 allow_no_value 默认值为 False,表示配置文件中是否允许选项没有值的情况。
示例 my.cnf

  1. [client]
  2. port = 3306
  3. user = mysql
  4. password = mysql
  5. host = 127.0.0.1
  6. [mysqld]
  7. basedir = /usr
  8. datadir = /var/lib/mysql
  9. tmpdir = /tmp
  10. 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 ```