注册 登录

清河洛

python标准库中的configparser模块

qingheluo2020-09-15清河洛411
configparser模块提供了结构与Windows系统中INI文件类似的配置文件解析器。下面是一个典型的简单ini配置文件格式:[DEFAULT] name = myname email = [email protected] [info] age = 30 [job] address = 中国 文件由多个节(section)组成,每个小节都有一个[section]标头 每个节包含多个键值对,键和值之间使用特定字符串(默认为 = 或 : )分隔 默认情况下小节名对大小写敏感而键对大小写不敏感 键和值开头和末尾的空格会被移除。 值可以跨越多行,但是需要...

configparser模块提供了结构与Windows系统中INI文件类似的配置文件解析器。

下面是一个典型的简单ini配置文件格式:

[DEFAULT]
name = myname
email = [email protected]

[info]
age = 30

[job]
address = 中国

    文件由多个节(section)组成,每个小节都有一个[section]标头
    每个节包含多个键值对,键和值之间使用特定字符串(默认为 = 或 : )分隔
    默认情况下小节名对大小写敏感而键对大小写不敏感
    键和值开头和末尾的空格会被移除。
    值可以跨越多行,但是需要其他行比第一行有更深的缩进。
    配置文件可以包含注释,要带有指定字符前缀 (默认为 # 和 ; )

ConfigParser对象,主配置解析器

configparser.ConfigParser(defaults=None, allow_no_value=False, delimiters=(‘=‘, ‘:‘), comment_prefixes=(‘#‘, ‘;‘), inline_comment_prefixes=None, strict=True, empty_lines_in_values=True, default_section=configparser.DEFAULTSECT, interpolation=BasicInterpolation())

defaults表示初始化时包含DEFAULT小节中固有默认值。
allow_no_value表示是否接受没有值的选项(值为None)
delimiters是指定分隔键与值分隔的字符串集合。
comment_prefixes是指定空行注释的前缀字符串集合。
inline_comment_prefixes是指定非空行注释的前缀字符串集合。
strict表示是否允许解析器在从单个源(文件、字符串或字典)读取时不允许任何节或选项出现重复
empty_lines_in_values为False时,每个空行均表示一个选项的结束。否则一个多行选项内部的空行会被保留为值的一部分。
default_section表示指定存放其他节的默认值和用于插值的特殊节的名称(通常命名为 "DEFAULT")。
interpolation指定插值行为的处理程序。None完全禁用插值,BasicInterpolation()表示常规处理插值行为,ExtendedInterpolation()是一种更高级插值处理形式。
插值中使用的所有选项名称默认会将选项名称转换为小写形式,如值%(bar)s和%(BAR)s是等价的。

值的插值:值可以在被get()调用返回之前进行预处理

configparser.BasicInterpolation:允许值包含引用了相同小节中其他值或者特殊的默认小节中的值的格式字符串。

[Paths]
root: demo
path: %(root)s/location
bin: %(path)s/bin

上例中,会将%(demo)s解析为root的值(demo),%(path)s解析为path的值(%(root)s/location)。
所以最终path会被解析为demo/location,bin会被解析为demo/location/bin
所有插值都是按需进行的,这样引用链中使用的键不必以任何特定顺序在配置文件中指明

configparser.ExtendedInterpolation

一个用于插值的替代处理程序实现了更高级的语法。插值可以跨越多个层级, 使用${section:option}来表示来自外部小节的值。

section部分可以省略,会默认从当前小节或特殊小节获取值。

[Paths]
root: demo
path: ${root}/location
bin: ${path}/bin

[other]
file: ${Paths:bin}/run

ConfigParser对象的方法:

read(filenames, encoding=None):尝试读取并解析一个包含文件名的可迭代对象,返回一个被成功解析的文件名列表。

filenames为字符串、bytes对象或path-like object,它会被当作单个文件来处理。 
filenames中名称对应的某个文件无法被打开,该文件将被忽略。
可以指定包含多个潜在配置文件位置的可迭代对象,存在于该可迭代对象中的所有配置文件都将被读取。
如果名称对应的文件全都不存在,则ConfigParser实例将包含一个空数据集。
一个要求从文件加载初始值的应用应当在调用read()来获取任何可选文件之前使用read_file()来加载所要求的一个或多个文件

config = configparser.ConfigParser()
config.read_file(open(‘defaults.cfg‘))
config.read([‘site.cfg‘, ‘etc/site.cfg‘],encoding=‘utf-8‘)

read_file(file_obj, source=None)

file_obj一个产生Unicode字符串的可迭代对象(如以文本模式打开的文件),从该对象中读取并解析配置数据。
可选参数source指定要读取的文件名称。如果未给出并且file_obj具有name属性,则该属性会被用作source;默认值为 ‘‘。

read_string(string, source=‘‘):从字符串中解析配置数据。可选参数source指定一个所传入字符串的上下文专属名称。

read_dict(dictionary, source=‘‘)

从任意一个提供了类似于字典的items()方法的对象加载配置。
键为节名称,值为包含节中所出现的键和值的字典。值会被自动转换为字符串。
可选参数source 指定一个所传入对象的上下文专属名称。 如果未给出,则会使用 。

add_section(section):向实例添加一个名为section的节。小节名称不能已存在且不能是DEFAULT否则报错。

remove_section(section):从配置中移除指定的section。如果section确实存在则返回True,在其他情况下将返回False。

remove_option(section, option)

    将指定的option从指定的section中移除。
    如果section不存在则会引发NoSectionError。
    如果要移除的选项存在则返回True,在其他情况下将返回False。

set(section, option, value):将所给出的指定选项设为指定的值。

defaults():返回包含实例范围内默认值的字典。

sections():返回可用节的列表(不含DEFAULT)

options(section):返回指定section中可用选项的列表

items([section,] raw=False)

返回给定section中的option的name,value对组成的列表。
当未给出section时,将返回由 section_name, section_proxy 对组成的列表,包括DEFAULT。

has_section(section):检查指定的section是否存在于配置中(不含DEFAULT)

has_option(section, option):指定的section存在并且包含给定的option则返回True;否则返回 False。如果section 为None或空字符串,则会使用DEFAULT。

get(section, option, *, raw=False, [, fallback])

获取指定section小节的option选项值。
默认所有插值会被解析后输出,如果raw为True,则不解析插值。
fallback指定如果未找到指定选项时的返回值。

getint(section, option, *, raw=False, [, fallback]):将指定section中的option强制转换为整数。

getfloat(section, option, *, raw=False, [, fallback]):将指定section中的option强制转换为浮点数

getboolean(section, option, *, raw=False, [, fallback])

将指定section中的option强制转换为布尔值。
值 ‘1‘, ‘yes‘, ‘true‘ 和 ‘on‘会返回True,‘0‘, ‘no‘, ‘false‘ 和 ‘off‘会返回False。字符串值对大小写不敏感。任何其他值都将导致引发ValueError。

write(file_object, space_around_delimiters=True)

将配置信息写入以文本模式打开(接受字符串)的file_objectt。
space_around_delimiters表示是否在键和值之前的分隔符两边将加上空格。


网址导航