参考链接: 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() [] 通过 read() 方法读取配置文件 >>> config.read('example.ini') ['example.ini'] 配置文件中每一个 [] 代表一个 section, 其中 [DEFAULT] (“DEFAULT” 必须大写)代表默认 section。若指定的 section 中找不到对应的 key ,则会使用默认 section 中的 key。sections() 方法显示所有的 section,但不会包括默认 section。 >>> config.sections() ['bitbucket.org', 'topsecret.server.com'] 可以通过 in 直接判断某个 section 是否存在。默认 section 也能判断。 >>> 'bitbucket.org' in config True >>> 'bitbucket.com' in config False >>> 'DEFAULT' in config True 也可以通过 has_section(section) 判断某个 section 是否存在。默认 section 不能判断。 >>> config.has_section('DEFAULT') False >>> config.has_section('bitbucket.org') True defaults() 方法显示默认 section 中的值,为一个 OrderedDict 类型的字典 >>> config.defaults() OrderedDict([('serveraliveinterval', '45'), ('compression', 'yes'), ('compressionlevel', "9,'11',2"), ('forwardx11', 'yes')]) options(section) 方法显示出指定 section 中的所有 key,同时也包括此 section 中没有,但默认 section 中的 key。 >>> config.options('topsecret.server.com') ['port', 'forwardx11', 'serveraliveinterval', 'compression', 'compressionlevel'] has_option(section, option) 可以判断指定 section 的指定 key 是否存在。 如果指定的 section 为 None 或空字符串,则会使用默认 section 判断。 >>> config.has_option('topsecret.server.com','port') True >>> config.has_option(None,'port') False >>> config.has_option(None,'compression') True value 值在配置文件中可以换行,但换行后开头至少需要有一个空格,且比 key 的位置靠右。每个 key 对应的 value 值均作为一个字符串存储。包括其中的换行符,逗号和引号等。可以直接使用类似于字典的方法获取 value 值。 >>> 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]) 获取指定名称的 section 的一个 option 的值。 如果提供了 vars,则它必须为一个字典。 option 的查找顺序为 vars*(如果有提供)、*section 以及 DEFAULTSECT。 如果未找到该键并且提供了 fallback,则它会被用作回退值。 可以提供 None 作为 fallback 值。 >>> config.get('DEFAULT', 'compressionlevel') "9,'11',2" section 可以赋值给变量。section 中的 value 会覆盖默认 section 中的 value。 >>> topsecret = config['topsecret.server.com'] >>> topsecret['ForwardX11'] 'no' 获取此 section 不存在的 key 时,会从默认 section 中取值。 >>> topsecret['compression'] 'yes' 注意:简单地将值传给 bool() 是没有用的,bool(‘False’) 仍然会是 True。因此,使用 getboolean(),getint() 和 getfloat() 方法转换 value 类型,且有三种使用方式。 >>> bool(topsecret['forwardx11']) True >>> topsecret.getboolean('ForwardX11') False >>> config['bitbucket.org'].getboolean('ForwardX11') True >>> config.getboolean('bitbucket.org', 'Compression') True getint() 用法类似 >>> topsecret.getint('port') 50022 >>> topsecret['port'] '50022' 可以通过迭代输出某个 section 中的所有 key,这同时会输出此 section 中没有,但默认 section 中有的 key。 >>> for key in config['bitbucket.org']:print(key) ... user serveraliveinterval compression compressionlevel forwardx11 items(section, raw=False, vars=None),返回指定的 section 中的 key - value 对组成的列表。可使用 dict() 方法转成字典。 >>> 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
