参考链接:
14.2. configparser — 配置文件解析器
配置文件是由小节组成的,每个小节都有一个 [section] 标头,加上多个由特定字符串 (默认为 = 或 : 1) 分隔的键/值条目。 默认情况下小节名对大小写敏感而键对大小写不敏感。 键和值开头和末尾的空格会被移除。 值可以被省略,在此情况下键/值分隔符也可以被省略。 值还可以跨越多行,只要其他行带有比值的第一行更深的缩进。 依据解析器的具体模式,空白行可能被视为多行值的组成部分也可能被忽略。
配置文件可以包含注释,要带有指定字符前缀 (默认为 # 和 ; 1)。 注释可以单独出现于原本的空白行,并可使用缩进。
配置文件示例:
[DEFAULT]
serveraliveinterval = 45
compression = yes
compressionlevel = 9,'11',2
forwardx11 = yes
[bitbucket.org]
user = hg,
tt,
'sz',
[topsecret.server.com]
port = 50022
forwardx11 = no
命令行执行结果:
>>> import configparser
>>> config = configparser.ConfigParser()
>>> config.sections()
[]
>>> config.read('example.ini')
['example.ini']
>>> config.sections()
['bitbucket.org', 'topsecret.server.com']
>>> 'bitbucket.org' in config
True
>>> 'bitbucket.com' in config
False
>>> 'DEFAULT' in config
True
>>> config.has_section('DEFAULT')
False
>>> config.has_section('bitbucket.org')
True
>>> config.defaults()
OrderedDict([('serveraliveinterval', '45'), ('compression', 'yes'), ('compressionlevel', "9,'11',2"), ('forwardx11', 'yes')])
>>> config.options('topsecret.server.com')
['port', 'forwardx11', 'serveraliveinterval', 'compression', 'compressionlevel']
>>> config.has_option('topsecret.server.com','port')
True
>>> config.has_option(None,'port')
False
>>> config.has_option(None,'compression')
True
>>> config['bitbucket.org']['User']
"hg,\ntt,\n'sz',"
>>> print(config['bitbucket.org']['User'])
hg,
tt,
'sz',
>>> config['DEFAULT']['compressionlevel']
"9,'11',2"
get(section, option, *, raw=False, vars=None[, fallback])
>>> config.get('DEFAULT', 'compressionlevel')
"9,'11',2"
>>> topsecret = config['topsecret.server.com']
>>> topsecret['ForwardX11']
'no'
>>> topsecret['compression']
'yes'
>>> bool(topsecret['forwardx11'])
True
>>> topsecret.getboolean('ForwardX11')
False
>>> config['bitbucket.org'].getboolean('ForwardX11')
True
>>> config.getboolean('bitbucket.org', 'Compression')
True
>>> topsecret.getint('port')
50022
>>> topsecret['port']
'50022'
>>> for key in config['bitbucket.org']:print(key)
...
user
serveraliveinterval
compression
compressionlevel
forwardx11
>>> config.items('topsecret.server.com')
[('serveraliveinterval', '45'), ('compression', 'yes'), ('compressionlevel', "9,'11',2"), ('forwardx11', 'no'), ('port', '50022')]
>>> dict(config.items('topsecret.server.com'))
{'serveraliveinterval': '45', 'compression': 'yes', 'compressionlevel': "9,'11',2", 'forwardx11': 'no', 'port': '50022'}
14.2.3. fallback (回退值)
与字典类似,你可以使用某个小节的 get() 方法来提供回退值(笔者理解其实是字典中的默认值):
>>> topsecret.get('Port')
'50022'
>>> topsecret.get('CompressionLevel')
'9'
>>> topsecret.get('Cipher')
>>> topsecret.get('Cipher', '3des-cbc')
'3des-cbc'
请注意默认值会优先于回退值。 例如,在我们的示例中 ‘CompressionLevel’ 键仅在 ‘DEFAULT’ 小节被指定。 如果你尝试在 ‘topsecret.server.com’ 小节获取它,我们将总是获取到默认值,即使我们指定了一个回退值:
>>> topsecret.get('CompressionLevel', '3')
'9'
read_file(f, source=None)
从 f 读取并解析配置数据,它必须是一个产生 Unicode 字符串的可迭代对象(例如以文本模式打开的文件)。
read_string(string, source=’’)
从字符串中解析配置数据。
read_dict(dictionary, source=’’)
从任意一个提供了类似于字典的 items() 方法的对象加载配置。 键为节名称,值为包含节中所出现的键和值的字典。 如果所用的字典类型会保留顺序,则节和其中的键将按顺序加入。 值会被自动转换为字符串。
此方法可被用于在解析器之间拷贝状态。
详细见:14.2.9. ConfigParser 对象
TODO