该模块提供ConfigParser
实现基本配置语言的类,该基本配置语言提供的结构类似于Microsoft Windows INI文件中的结构。您可以使用它来编写可由最终用户轻松定制的Python程序。
我们来看一个非常基本的配置文件,如下所示:
[DEFAULT]
ServerAliveInterval = 45
Compression = yes
CompressionLevel = 9
ForwardX11 = yes
[bitbucket.org]
User = hg
[topsecret.server.com]
Port = 50022
ForwardX11 = no
INI文件的结构在以下部分中介绍。本质上,该文件由多个部分组成,每个部分都包含带有值的键。 configparser
类可以读取和写入此类文件。让我们开始以编程方式创建上述配置文件。
>>> 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)
...
如您所见,我们可以像对待字典一样对待配置解析器。有一些差异,但是其行为与您从字典中所期望的非常接近。
现在我们已经创建并保存了配置文件,让我们回读它并浏览其中的数据。
>>> 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'
正如我们在上面看到的,API非常简单。神奇的一点是该DEFAULT
部分为所有其他部分1提供了默认值。还要注意,各节中的键不区分大小写,并存储在小写字母1中。
配置解析器不会猜测配置文件中值的数据类型,而是始终将它们内部存储为字符串。这意味着,如果需要其他数据类型,则应自行转换:
>>> int(topsecret['Port'])
50022
>>> float(topsecret['CompressionLevel'])
9.0
由于此任务非常常见,因此配置解析器提供了一系列方便的getter方法来处理整数,浮点数和布尔值。最后一个是最有趣的,因为仅将值传递给bool()
就没有好处,因为bool('False')
它仍然存在True
。这就是配置解析器还提供的原因getboolean()
。此方法不区分大小写,并从'yes'
/ 'no'
,'on'
/ 'off'
, 'true'
/ 'false'
和'1'
/ '0'
1识别布尔值。例如:
>>> topsecret.getboolean('ForwardX11')
False
>>> config['bitbucket.org'].getboolean('ForwardX11')
True
>>> config.getboolean('bitbucket.org', 'Compression')
True
除了之外getboolean()
,config解析器还提供了等价getint()
和 getfloat()
方法。您可以注册自己的转换器并自定义提供的转换器。1个
与字典一样,您可以使用部分的get()
方法来提供后备值:
>>> topsecret.get('Port')
'50022'
>>> topsecret.get('CompressionLevel')
'9'
>>> topsecret.get('Cipher')
>>> topsecret.get('Cipher', '3des-cbc')
'3des-cbc'
请注意,默认值优先于后备值。例如,在我们的示例中,'CompressionLevel'
仅在'DEFAULT'
部分中指定了密钥。如果我们尝试从section中获取它'topsecret.server.com'
,即使我们指定了一个后备,我们也将始终获取默认值:
>>> topsecret.get('CompressionLevel', '3')
'9'
还有一点需要注意的是,解析器级别的get()
方法提供了一个自定义的,更复杂的接口,该接口为了向后兼容而进行了维护。使用此方法时,可以通过fallback
仅关键字参数提供备用值:
>>> 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
配置文件由多个部分组成,每个部分都由一个[section]
标题开头,然后是由特定字符串(=
或:
默认为1)分隔的键/值条目。默认情况下,节名称区分大小写,但键不是 1。前导和尾随空格从键和值中删除。值可以省略,在这种情况下,键/值定界符也可以省去。值也可以跨多行,只要它们缩进的深度比值的第一行深。根据解析器的模式,空白行可能被视为多行值的一部分或被忽略。
配置文件可能包括注释,由特定字符(前缀#
和;
默认为1)。注释可能会自己出现在否则为空的行上,可能会缩进。1个
例如:
[Simple Values]
key=value
spaces in keys=allowed
spaces in values=allowed as well
spaces around the delimiter = obviously
you can also use : to delimit keys from values
[All Values Are Strings]
values like this: 1000000
or this: 3.14159265359
are they treated as numbers? : no
integers, floats and booleans are held as: strings
can use the API to get converted values directly: true
[Multiline Values]
chorus: I'm a lumberjack, and I'm okay
I sleep all night and I work all day
[No Values]
key_without_value
empty string value here =
[You can use comments]
# like this
; or this
# By default only in an empty line.
# Inline comments can be harmful because they prevent users
# from using the delimiting characters as parts of values.
# That being said, this can be customized.
[Sections Can Be Indented]
can_values_be_as_well = True
does_that_mean_anything_special = False
purpose = formatting for readability
multiline_values = are
handled just fine as
long as they are indented
deeper than the first line
of a value
# Did I mention we can indent comments, too?
除了核心功能之外,还ConfigParser
支持插值。这意味着可以在get()
调用返回值之前对其进行预处理。
类configparser.
BasicInterpolation
使用的默认实现ConfigParser
。它使值可以包含引用同一节中其他值或特殊默认节1中的值的格式字符串。初始化时可以提供其他默认值。
例如:
[Paths]
home_dir: /Users
my_dir: %(home_dir)s/lumberjack
my_pictures: %(my_dir)s/Pictures
[Escape]
gain: 80%% # use a %% to escape the % sign (% is the only character that needs to be escaped)
在上面的示例中,ConfigParser
将插值设置为 BasicInterpolation()
会解析%(home_dir)s
为home_dir
(/Users
在这种情况下)的值 。 %(my_dir)s
实际上将解决/Users/lumberjack
。所有插值均按需完成,因此不必在配置文件中以任何特定顺序指定引用链中使用的键。
随着interpolation
设置None
,解析器仅返回 %(my_dir)s/Pictures
作为的价值my_pictures
和 %(home_dir)s/lumberjack
作为价值my_dir
。
类configparser.
ExtendedInterpolation
插值的替代处理程序,它实现了更高级的语法,例如用于中zc.buildout
。扩展插值${section:option}
用于表示来自外部部分的值。插值可以跨越多个级别。为方便起见,如果section:
省略了该 零件,则插值默认为当前部分(可能还有特殊部分的默认值)。
例如,上面使用基本插值指定的配置在扩展插值时看起来像这样:
[Paths]
home_dir: /Users
my_dir: ${home_dir}/lumberjack
my_pictures: ${my_dir}/Pictures
[Escape]
cost: $$80 # use a $$ to escape the $ sign ($ is the only character that needs to be escaped)
也可以从其他部分获取值:
[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}
3.2版中的新功能。
映射协议访问是功能的通用名称,该功能使自定义对象可以像字典一样使用。在的情况下configparser
,映射接口实现正在使用 parser['section']['option']
表示法。
parser['section']
特别是返回解析器中该节数据的代理。这意味着这些值不会被复制,而是根据需要从原始解析器中获取。更为重要的是,当在部分代理上更改值时,它们实际上在原始解析器中发生了变异。
configparser
对象的行为尽可能接近实际的字典。映射界面已完成,并遵循 MutableMapping
ABC。但是,应考虑一些差异:
默认情况下,可以不区分大小写的方式访问节中的所有键 1。例如,仅产生'ed选项键名称。这意味着默认情况下小写的键。同时,对于包含键的部分,两个表达式均返回:for option in parser["section"]
optionxform
'a'
True
"a" in parser["section"]
"A" in parser["section"]
所有节也都包含DEFAULTSECT
值,这意味着 .clear()
在节上可能不会使该节明显为空。这是因为无法从该部分中删除默认值(因为从技术上讲它们不存在)。如果它们在本节中被覆盖,则删除将使默认值再次可见。尝试删除默认值会导致KeyError
。
DEFAULTSECT
无法从解析器中删除:
试图删除它引发ValueError
,
parser.clear()
保持原样,
parser.popitem()
永不退还。
parser.get(section, option, **kwargs)
-第二个参数不是 后备值。但是请注意,节级别的get()
方法与映射协议和经典的configparser API都兼容。
parser.items()
与映射协议兼容(返回section_name和section_proxy对的列表, 包括DEFAULTSECT)。但是,也可以使用以下参数调用此方法:。后者调用返回的列表选项,值在指定的对,与膨胀的所有内插(除非 被提供)。parser.items(section, raw, vars)
section
raw=True
映射协议是在现有旧版API之上实现的,因此,覆盖原始接口的子类仍应按预期工作。
INI格式变体几乎与使用它的应用程序一样多。 configparser
为提供最大的明智INI样式集提供支持很长的路要走。默认功能主要由历史背景决定,很可能您希望自定义某些功能。
更改特定配置解析器工作方式的最常见方法是使用以下__init__()
选项:
defaults,默认值:None
此选项接受键值对的字典,该字典将首先放在该DEFAULT
部分中。这提供了一种优雅的方式来支持简洁的配置文件,这些文件不指定与记录的默认值相同的值。
提示:如果要为特定部分指定默认值,请read_dict()
在读取实际文件之前使用 。
dict_type,默认值:dict
此选项对映射协议的行为以及书面配置文件的外观有重大影响。使用标准字典,每个部分都按照它们添加到解析器中的顺序存储。部分中的选项也是如此。
例如,可以使用备用字典类型对写回时的节和选项进行排序。
请注意:有多种方法可以在单个操作中添加一组键值对。当您在这些操作中使用常规词典时,键的顺序将被排序。例如:
>>> parser = configparser.ConfigParser()
>>> parser.read_dict({'section1': {'key1': 'value1',
... 'key2': 'value2',
... 'key3': 'value3'},
... 'section2': {'keyA': 'valueA',
... 'keyB': 'valueB',
... 'keyC': 'valueC'},
... 'section3': {'foo': 'x',
... 'bar': 'y',
... 'baz': 'z'}
... })
>>> parser.sections()
['section1', 'section2', 'section3']
>>> [option for option in parser['section3']]
['foo', 'bar', 'baz']
allow_no_value,默认值:False
已知某些配置文件包含不带值的设置,但其他设置符合所支持的语法configparser
。构造函数的 allow_no_value参数可用于指示应接受此类值:
>>> import configparser
>>> sample_config = """
... [mysqld]
... user = mysql
... pid-file = /var/run/mysqld/mysqld.pid
... skip-external-locking
... old_passwords = 1
... skip-bdb
... # we don't need ACID today
... skip-innodb
... """
>>> config = configparser.ConfigParser(allow_no_value=True)
>>> config.read_string(sample_config)
>>> # Settings with values are treated as before:
>>> config["mysqld"]["user"]
'mysql'
>>> # Settings without values provide None:
>>> config["mysqld"]["skip-bdb"]
>>> # Settings which aren't specified still raise an error:
>>> config["mysqld"]["does-not-exist"]
Traceback (most recent call last):
...
KeyError: 'does-not-exist'
分隔符,默认值:('=', ':')
分隔符是从部分中的值分隔键的子字符串。在一行上第一次出现定界子字符串被视为定界符。这意味着值(但不能包含键)可以包含定界符。
另请参阅的space_around_delimiters参数 ConfigParser.write()
。
comment_prefixes,默认值:('#', ';')
inline_comment_prefixes,默认值:None
注释前缀是指示配置文件中有效注释开始的字符串。comment_prefixes仅用于否则为空的行(可选缩进),而inline_comment_prefixes可以在每个有效值之后使用(例如节名称,选项和空行)。默认情况下,内联注释被禁用,'#'
并且';'
用作整行注释的前缀。
在3.2版中进行了更改:在以前的版本中,configparser
行为comment_prefixes=('#',';')
和匹配 inline_comment_prefixes=(';',)
。
请注意,配置解析器不支持转义注释前缀,因此使用inline_comment_prefixes可能会阻止用户使用用作注释前缀的字符来指定选项值。如有疑问,请避免设置inline_comment_prefixes。在任何情况下,在多行值的行首存储注释前缀字符的唯一方法是对前缀进行插值,例如:
>>> from configparser import ConfigParser, ExtendedInterpolation
>>> parser = ConfigParser(interpolation=ExtendedInterpolation())
>>> # the default BasicInterpolation could be used as well
>>> parser.read_string("""
... [DEFAULT]
... hash = #
...
... [hashes]
... shebang =
... ${hash}!/usr/bin/env python
... ${hash} -*- coding: utf-8 -*-
...
... extensions =
... enabled_extension
... another_extension
... #disabled_by_comment
... yet_another_extension
...
... interpolation not necessary = if # is not at line start
... even in multiline values = line #1
... line #2
... line #3
... """)
>>> print(parser['hashes']['shebang'])
#!/usr/bin/env python
# -*- coding: utf-8 -*-
>>> print(parser['hashes']['extensions'])
enabled_extension
another_extension
yet_another_extension
>>> print(parser['hashes']['interpolation not necessary'])
if # is not at line start
>>> print(parser['hashes']['even in multiline values'])
line #1
line #2
line #3
严格,默认值:True
当设置为True
,解析器将不允许任何部分或选项重复而从单个源读取(使用read_file()
, read_string()
或read_dict()
)。建议在新应用程序中使用严格的解析器。
在3.2版中更改:在以前的版本中,configparser
行为match strict=False
。
empty_lines_in_values,默认值:True
在配置解析器中,值可以跨越多行,只要它们缩进的次数多于保存它们的键。默认情况下,解析器还让空行成为值的一部分。同时,键可以任意缩进以提高可读性。因此,当配置文件变得又大又复杂时,用户很容易失去对文件结构的跟踪。举个例子:
[Section]
key = multiline
value with a gotcha
this = is still a part of the multiline value of 'key'
对于用户而言,查看她是否使用比例字体来编辑文件可能尤其成问题。这就是为什么当您的应用程序不需要带有空行的值时,应该考虑禁止使用它们。这将使空行每次都拆分键。在上面的示例中,它将产生两个键,key
和this
。
default_section,默认值:configparser.DEFAULTSECT
(即: "DEFAULT"
)
允许将默认值的特殊部分用于其他部分或插值的惯例是该库的强大概念,可让用户创建复杂的声明性配置。通常会调用此部分,"DEFAULT"
但可以对其进行自定义以指向任何其他有效的部分名称。一些典型值包括:"general"
或 "common"
。提供的名称用于在从任何源读取时识别默认部分,并在将配置写回到文件时使用。可以使用该parser_instance.default_section
属性检索其当前值, 并且可以在运行时进行修改(即,将文件从一种格式转换为另一种格式)。
插值,默认值:configparser.BasicInterpolation
可以通过通过插值参数提供自定义处理程序来自定义插值行为。None
可用于完全关闭插值,ExtendedInterpolation()
提供了受启发的更高级的变体zc.buildout
。有关专用主题的更多信息,请参见 专用文档部分。 RawConfigParser
的默认值为None
。
转换器,默认值:未设置
配置解析器提供执行类型转换的选项值获取器。默认情况下getint()
,getfloat()
和 getboolean()
被实施。如果需要其他获取器,则用户可以在子类中定义它们,或者通过字典,其中每个键是转换器的名称,每个值是实现所述转换的可调用项。例如,传递将同时添加 解析器对象和所有节代理。换句话说,可以同时编写 和 。{'decimal': decimal.Decimal}
getdecimal()
parser_instance.getdecimal('section', 'key', fallback=0)
parser_instance['section'].getdecimal('key', 0)
如果转换器需要访问解析器的状态,则可以将其实现为配置解析器子类上的方法。如果此方法的名称以开头get
,则该格式将在所有部分代理中以dict兼容形式出现(请参见getdecimal()
上面的示例)。
通过覆盖这些解析器属性的默认值,可以实现更高级的自定义。默认值是在类上定义的,因此它们可能会被子类或属性分配所覆盖。
ConfigParser.
BOOLEAN_STATES
默认情况下使用时getboolean()
,配置解析器考虑以下值True
:'1'
,'yes'
,'true'
, 'on'
和以下值False
:'0'
,'no'
,'false'
, 'off'
。您可以通过指定一个自定义的字符串字典及其布尔结果来覆盖它。例如:
>>> custom = configparser.ConfigParser()
>>> custom['section1'] = {'funky': 'nope'}
>>> custom['section1'].getboolean('funky')
Traceback (most recent call last):
...
ValueError: Not a boolean: nope
>>> custom.BOOLEAN_STATES = {'sure': True, 'nope': False}
>>> custom['section1'].getboolean('funky')
False
其他典型的布尔对包括accept
/ reject
或 enabled
/ disabled
。
ConfigParser.
optionxform
(选项)
此方法在每次读取,获取或设置操作时都会转换选项名称。默认将名称转换为小写。这也意味着,当写入配置文件时,所有键都将小写。如果不合适,请重写此方法。例如:
>>> config = """
... [Section1]
... Key = Value
...
... [Section2]
... AnotherKey = Value
... """
>>> typical = configparser.ConfigParser()
>>> typical.read_string(config)
>>> list(typical['Section1'].keys())
['key']
>>> list(typical['Section2'].keys())
['anotherkey']
>>> custom = configparser.RawConfigParser()
>>> custom.optionxform = lambda option: option
>>> custom.read_string(config)
>>> list(custom['Section1'].keys())
['Key']
>>> list(custom['Section2'].keys())
['AnotherKey']
注意
optionxform函数将选项名称转换为规范形式。这应该是一个幂等函数:如果名称已经是规范形式,则应原样返回。
ConfigParser.
SECTCRE
用于解析节标题的已编译正则表达式。默认匹配[section]
名称"section"
。空格被认为是部分名称的一部分,因此将被视为name的一部分。如果不合适,请覆盖此属性。例如:[ larch ]
" larch "
>>> import re
>>> config = """
... [Section 1]
... option = value
...
... [ Section 2 ]
... another = val
... """
>>> typical = configparser.ConfigParser()
>>> typical.read_string(config)
>>> typical.sections()
['Section 1', ' Section 2 ']
>>> custom = configparser.ConfigParser()
>>> custom.SECTCRE = re.compile(r"\[ *(?P[^]]+?) *\]" )
>>> custom.read_string(config)
>>> custom.sections()
['Section 1', 'Section 2']
注意
尽管ConfigParser对象还使用OPTCRE
属性来识别选项行,但不建议覆盖它,因为这会干扰构造函数选项allow_no_value和delimiters。
主要是出于向后兼容性的考虑,configparser
还提供了带有显式get
/ set
方法的旧式API 。尽管存在以下概述的方法的有效用例,但对于新项目,首选映射协议访问。遗留API有时更高级,底层且完全违反直觉。
写入配置文件的示例:
import configparser
config = configparser.RawConfigParser()
# Please note that using RawConfigParser's set functions, you can assign
# non-string values to keys internally, but will receive an error when
# attempting to write to a file or when you get it in non-raw mode. Setting
# values using the mapping protocol or ConfigParser's set() does not allow
# such assignments to take place.
config.add_section('Section1')
config.set('Section1', 'an_int', '15')
config.set('Section1', 'a_bool', 'true')
config.set('Section1', 'a_float', '3.1415')
config.set('Section1', 'baz', 'fun')
config.set('Section1', 'bar', 'Python')
config.set('Section1', 'foo', '%(bar)s is %(baz)s!')
# Writing our configuration file to 'example.cfg'
with open('example.cfg', 'w') as configfile:
config.write(configfile)
再次读取配置文件的示例:
import configparser
config = configparser.RawConfigParser()
config.read('example.cfg')
# getfloat() raises an exception if the value is not a float
# getint() and getboolean() also do this for their respective types
a_float = config.getfloat('Section1', 'a_float')
an_int = config.getint('Section1', 'an_int')
print(a_float + an_int)
# Notice that the next output does not interpolate '%(bar)s' or '%(baz)s'.
# This is because we are using a RawConfigParser().
if config.getboolean('Section1', 'a_bool'):
print(config.get('Section1', 'foo'))
要获得插值,请使用ConfigParser
:
import configparser
cfg = configparser.ConfigParser()
cfg.read('example.cfg')
# Set the optional *raw* argument of get() to True if you wish to disable
# interpolation in a single get operation.
print(cfg.get('Section1', 'foo', raw=False)) # -> "Python is fun!"
print(cfg.get('Section1', 'foo', raw=True)) # -> "%(bar)s is %(baz)s!"
# The optional *vars* argument is a dict with members that will take
# precedence in interpolation.
print(cfg.get('Section1', 'foo', vars={'bar': 'Documentation',
'baz': 'evil'}))
# The optional *fallback* argument can be used to provide a fallback value
print(cfg.get('Section1', 'foo'))
# -> "Python is fun!"
print(cfg.get('Section1', 'foo', fallback='Monty is not.'))
# -> "Python is fun!"
print(cfg.get('Section1', 'monster', fallback='No such things as monsters.'))
# -> "No such things as monsters."
# A bare print(cfg.get('Section1', 'monster')) would raise NoOptionError
# but we can also use:
print(cfg.get('Section1', 'monster', fallback=None))
# -> None
两种类型的ConfigParsers中都提供默认值。如果未在其他位置定义使用的选项,则会在插值中使用它们。
import configparser
# New instance with 'bar' and 'baz' defaulting to 'Life' and 'hard' each
config = configparser.ConfigParser({'bar': 'Life', 'baz': 'hard'})
config.read('example.cfg')
print(config.get('Section1', 'foo')) # -> "Python is fun!"
config.remove_option('Section1', 'bar')
config.remove_option('Section1', 'baz')
print(config.get('Section1', 'foo')) # -> "Life is hard!"
类configparser.
ConfigParser
(defaults = None,dict_type = dict,allow_no_value = False,分隔符=('=',':'),comment_prefixes =('#',';'),inline_comment_prefixes = None,strict = True,empty_lines_in_values = True,default_section = configparser.DEFAULTSECT,插值= BasicInterpolation(),转换器= {} )
主要配置解析器。当默认给出,它被初始化到内在默认的字典。当dict_type给出,它将被用来创建字典对象的部分名单,对于部分中的选项,并为默认值。
当分隔符给出,它被用作一组,从值分割密钥的子串。当comment_prefixes给出,它将被用作集前缀,否则空行注释子的。注释可以缩进。当指定inline_comment_prefixes时,它将用作在非空行中添加注释前缀的子字符串集。
当strict为True
默认值时(默认),解析器将不允许在从单个源(文件,字符串或字典)读取,提高DuplicateSectionError
或 读取任何部分或选项重复DuplicateOptionError
。当empty_lines_in_values为False
(默认值:)时True
,每个空行都标记一个选项的结尾。否则,多行选项的内部空行将保留为值的一部分。当allow_no_value为True
(默认值:)时False
,接受不带值的选项;否则为0。这些None
元素的值是,并且无需尾随定界符即可对其进行序列化。
当default_section给出,它指定为其他部分和插值目的的特殊部分保持默认值的名称(通常命名"DEFAULT"
)。可以使用default_section
实例属性在运行时检索和更改此值。
可以通过通过插值参数提供自定义处理程序来自定义插值行为。None
可用于完全关闭插值,ExtendedInterpolation()
提供了受启发的更高级的变体zc.buildout
。有关专用主题的更多信息,请参见 专用文档部分。
插值中使用的所有选项名称都将通过该optionxform()
方法传递, 就像其他任何选项名称引用一样。例如,使用默认实现optionxform()
(将选项名称转换为小写),则值和等效。foo %(bar)s
foo %(BAR)s
当转换器给出,它应该是一个字典,其中每个键表示一个类型的转换器的名称和每一个值是一个可调用的执行从字符串中的转化为期望的数据类型。每个转换器get*()
在解析器对象和部分代理上都有自己的对应方法。
在版本3.1中更改:默认dict_type为collections.OrderedDict
。
在版本3.2中更改:添加了allow_no_value,定界符,comment_prefixes,strict, empty_lines_in_values,default_section和插值。
在3.5版本中改为:该转换器加入争论。
改变在3.7版本:在默认参数读取read_dict()
,整个分析器提供一致的行为:非字符串键和值隐式转换为字符串。
在3.8版中更改:默认dict_type为dict
,因为它现在保留插入顺序。
defaults
()
返回包含实例范围默认值的字典。
sections
()
返回可用部分的列表;在默认的部分不包括在列表中。
add_section
(节)
将名为section的节添加到实例。如果给定名称的部分已经存在,DuplicateSectionError
则引发。如果传递了 默认的节名称,ValueError
则会引发。该部分的名称必须是字符串;如果没有,TypeError
就提出来。
在版本3.2中进行了更改:非字符串节名称提高了TypeError
。
has_section
(节)
指示配置中是否存在命名部分。该默认部分没有被确认。
options
(节)
返回指定部分中可用的选项列表。
has_option
(section,option )
如果给定的部分存在并且包含给定的option,则返回 True
; 否则返回False
。如果指定的 部分为None
或为空字符串,则假定为DEFAULT。
read
(filenames,encoding = None )
尝试读取和解析可迭代的文件名,并返回已成功解析的文件名列表。
如果文件名是字符串,bytes
对象或类似 路径的对象,则将其视为单个文件名。如果无法打开以文件名命名的文件,则该文件将被忽略。这样设计的目的是,您可以指定可能的配置文件位置的迭代(例如,当前目录,用户的主目录和某些系统范围的目录),并将读取迭代中的所有现有配置文件。
如果不存在任何命名文件,则ConfigParser
实例将包含一个空数据集。需要从文件中加载初始值的应用程序应read_file()
在调用read()
任何可选文件之前使用加载一个或多个所需文件:
import configparser, os
config = configparser.ConfigParser()
config.read_file(open('defaults.cfg'))
config.read(['site.cfg', os.path.expanduser('~/.myapp.cfg')],
encoding='cp1250')
新版本3.2:该编码参数。以前,所有文件都是使用的默认编码读取的open()
。
在新版本3.6.1:该文件名参数接受路径状物体。
新的版本3.7:在文件名参数接受一个bytes
对象。
read_file
(f,source = None )
从f读取和解析配置数据,该数据必须是可迭代的产生Unicode字符串(例如,以文本模式打开的文件)。
可选参数source指定要读取的文件的名称。如果未给出且f具有name
属性,则该属性用于 source;默认值为'??>'
。
版本3.2中的新功能:替换readfp()
。
read_string
(string,source ='<字符串>' )
从字符串中解析配置数据。
可选参数source指定所传递字符串的特定于上下文的名称。如果未给出,'
则使用。通常应该是文件系统路径或URL。
3.2版中的新功能。
read_dict
(字典,source ='
从任何提供类似dict items()
方法的对象中加载配置。键是节名,值是带有键和值的字典,应在节中显示。如果使用的字典类型保留顺序,则部分及其键将按顺序添加。值会自动转换为字符串。
可选参数source指定所传递字典的特定于上下文的名称。如果未给出,
则使用。
此方法可用于在解析器之间复制状态。
3.2版中的新功能。
get
(section,option,*,raw = False,vars = None [,fallback ] )
获取命名部分的选项值。如果提供了vars,则它必须是字典。该选项在vars(如果提供), section和DEFAULTSECT中按该顺序查找。如果未找到密钥并提供回退,则将其用作回退值。 可以作为后备值提供。None
'%'
除非raw参数为true ,否则所有插值都会在返回值中扩展。以与该选项相同的方式查找插值键的值。
在版本3.2中更改:参数raw,vars和fallback仅作为关键字,以防止用户尝试将第三个参数用作后备回退(尤其是在使用映射协议时)。
getint
(section,option,*,raw = False,vars = None [,fallback ] )
一种便利方法,用于将指定节中的选项强制为 整数。有关原始,var和 后备广告的说明,请参见。get()
getfloat
(section,option,*,raw = False,vars = None [,fallback ] )
一种方便的方法,用于将指定节中的选项强制 为浮点数。有关原始, var和后备广告的说明,请参见。get()
getboolean
(section,option,*,raw = False,vars = None [,fallback ] )
一种便利方法,用于将指定部分中的选项强制 为布尔值。请注意,该选项的接受值是 ,,,和,导致该方法返回,和,,,和,这导致它返回。这些字符串值以不区分大小写的方式检查。任何其他值都会导致它升高 。有关原始,var和 后备广告的说明,请参见。'1'
'yes'
'true'
'on'
True
'0'
'no'
'false'
'off'
False
ValueError
get()
items
(raw = False,vars = None )
items
(section,raw = False,vars = None )
如果未提供section,则返回section_name和 section_proxy对的列表,包括DEFAULTSECT。
否则,返回给定部分中选项的名称,值对列表。可选参数的含义与方法相同 。get()
改变在3.8版本:项目目前在乏不再出现在结果中。先前的行为将实际的解析器选项与为插值提供的变量混合在一起。
set
(section,option,value )
如果给定的部分存在,则将给定的选项设置为指定的值;否则提高NoSectionError
。 选项和值必须是字符串;如果没有,TypeError
就提出来。
write
(fileobject,space_around_delimiters = True )
将配置的表示形式写入指定的文件对象,该对象必须以文本模式(接受字符串)打开。将来的read()
调用可以解析此表示。如果 space_around_delimiters为true,则键和值之间的定界符将被空格包围。
remove_option
(section,option )
从指定的部分中删除指定的选项。如果该部分不存在,请引发。如果该选项已存在,则返回;否则返回 。NoSectionError
True
False
remove_section
(节)
从配置中删除指定的部分。如果该部分实际上存在,请返回True
。否则返回False
。
optionxform
(选项)
将在输入文件中找到的或由客户端代码传递的选项名称选项转换为应在内部结构中使用的形式。默认实现返回option的小写版本 ;子类可以覆盖此属性,或者客户端代码可以在实例上设置此名称的属性以影响此行为。
您无需继承解析器的子类即可使用此方法,还可以在实例上将其设置为具有字符串参数并返回字符串的函数。str
例如,将其设置为,将使选项名称区分大小写:
cfgparser = ConfigParser()
cfgparser.optionxform = str
请注意,在读取配置文件时,将在optionxform()
调用选项名称之前删除空格。
readfp
(fp,filename = None )
自3.2版起弃用:read_file()
改为使用。
在3.2版中进行了更改:readfp()
现在在fp上进行迭代,而不是调用fp.readline()
。
对于readfp()
使用不支持迭代的参数调用的现有代码,可以将以下生成器用作类似文件的对象的包装器:
def readline_generator(fp):
line = fp.readline()
while line:
yield line
line = fp.readline()
代替parser.readfp(fp)
使用 parser.read_file(readline_generator(fp))
。
configparser.
MAX_INTERPOLATION_DEPTH
get()
当raw 参数为false 时,递归插值的最大深度。仅在使用默认插值时才有意义 。
类configparser.
RawConfigParser
(默认值= None,dict_type = dict,allow_no_value = False,*,分隔符=('=',':'),comment_prefixes =('#',';'),inline_comment_prefixes = None,strict = True,empty_lines_in_values = True,default_section = configparser.DEFAULTSECT [,插值] )
的旧版变体ConfigParser
。它默认情况下禁用插值,并允许通过其unsafe add_section
和set
方法以及遗留defaults=
关键字参数处理来使用非字符串部分名称,选项名称和值。
在3.8版中更改:默认dict_type为dict
,因为它现在保留插入顺序。
注意
考虑使用ConfigParser
代替哪个检查要在内部存储的值的类型。如果不想插值,可以使用ConfigParser(interpolation=None)
。
add_section
(节)
将名为section的节添加到实例。如果给定名称的部分已经存在,DuplicateSectionError
则引发。如果传递了 默认的节名称,ValueError
则会引发。
未选中节的类型,这使用户可以创建非字符串命名节。不支持此行为,并且可能会导致内部错误。
set
(section,option,value )
如果给定的部分存在,则将给定的选项设置为指定的值;否则提高NoSectionError
。尽管可以使用 RawConfigParser
(或ConfigParser
将原始参数设置为true)内部存储非字符串值,但仅使用字符串值才能实现全部功能(包括内插和输出到文件)。
此方法使用户可以在内部为键分配非字符串值。不支持此行为,并且在尝试写入文件或以非原始模式获取文件时会导致错误。 使用 不允许进行此类分配的映射协议API。
异常configparser.
Error
所有其他configparser
异常的基类。
异常configparser.
NoSectionError
未找到指定节时引发异常。
异常configparser.
DuplicateSectionError
如果add_section()
在单个输入文件,字符串或字典中多次发现某节,则使用已经存在的节的名称或在严格的解析器中调用if 会引发异常。
版本3.2中的新功能:可选source
,lineno
并__init__()
添加了属性和参数 。
异常configparser.
DuplicateOptionError
如果从单个文件,字符串或字典中读取单个选项两次,则严格解析器会引发异常。这会捕获拼写错误和与大小写敏感有关的错误,例如,词典中可能有两个键代表同一个不区分大小写的配置键。
异常configparser.
NoOptionError
在指定的部分中找不到指定的选项时引发异常。
异常configparser.
InterpolationError
在执行字符串插值时发生问题时引发的异常的基类。
异常configparser.
InterpolationDepthError
由于迭代次数超过不能完成字符串插值时引发的异常MAX_INTERPOLATION_DEPTH
。的子类 InterpolationError
。
异常configparser.
InterpolationMissingOptionError
从值引用的选项不存在时引发的异常。的子类InterpolationError
。
异常configparser.
InterpolationSyntaxError
当进行替换的源文本不符合要求的语法时,引发异常。的子类InterpolationError
。
异常configparser.
MissingSectionHeaderError
尝试分析没有节头的文件时引发异常。
异常configparser.
ParsingError
尝试解析文件时发生错误时引发异常。
在版本3.2中进行了更改:为了保持一致,将filename
属性和__init__()
参数重命名 source
为。