Python 读取写入配置文件 ConfigParser

  1. configparser 简介
  2. ini 文件结构
  3. 基本使用
    1. 创建 ini 文件
    2. 读取 ini 文件
  4. 默认值
    1. fallback 参数
  5. Interpolation
    1. ExtendedInterpolation
  6. 其他方法

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 文件结构需要注意一下几点:

  1. 键值对可用 = 或者 : 进行分隔
  2. section 的名字是区分大小写的,而 key 的名字是不区分大小写的
  3. 键值对中头部和尾部的空白符会被去掉
  4. 值可以为多行
  5. 配置文件可以包含注释,注释以 # 或者 ; 为前缀

不一定要以 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" 转载请保留原文链接及作者。

目录