源代码: Lib/configparser.py

此模块提供了它实现一种基本配置语言 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

总的来说,这种文件由多个节组成,每个节包含多个带有值的键。 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)

...

如你所见,我们可以把配置解析器当作一个字典来处理。 两者确实存在差异,但是其行为非常接近于字典所具有一般行为。

现在我们已经创建并保存了一个配置文件,让我们再将它读取出来并探究其中包含的数据。

>>> 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

>>> '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 小节,它为所有其他小节提供了默认值。 还要注意小节中的键大小写不敏感并且会存储为小写形式。

INI 文件结构

配置文件是由小节组成的,每个小节都有一个 [section] 标头,加上多个由特定字符串 (默认为 = 或 : 1) 分隔的键/值条目。 默认情况下小节名对大小写敏感而键对大小写不敏感 1。 键和值开头和末尾的空格会被移除。 值可以被省略,在此情况下键/值分隔符也可以被省略。 值还可以跨越多行,只要其他行带有比值的第一行更深的缩进。 依据解析器的具体模式,空白行可能被视为多行值的组成部分也可能被忽略。

配置文件可以包含注释,要带有指定字符前缀 (默认为 # 和 ; )。 注释可以单独出现于原本的空白行,并可使用缩进。

ConfigParser 对象

classconfigparser.ConfigParser(defaults=None, dict_type=collections.OrderedDict, allow_no_value=False, delimiters=('=', ':'), comment_prefixes=('#', ';'), inline_comment_prefixes=None, strict=True, empty_lines_in_values=True, default_section=configparser.DEFAULTSECT, interpolation=BasicInterpolation(), converters={})

主配置解析器。 当给定 defaults 时,它会被初始化为包含固有默认值的字典。 当给定 dict_type 时,它将被用来创建包含节、节中的选项以及默认值的字典。

当给定 delimiters 时,它会被用作分隔键与值的子字符串的集合。 当给定 comment_prefixes 时,它将被用作在否则为空行的注释的前缀子字符串的集合。 注释可以被缩进。 当给定 inline_comment_prefixes 时,它将被用作非空行的注释的前缀子字符串的集合。

当 strict 为 True (默认值) 时,解析器在从单个源(文件、字符串或字典)读取时将不允许任何节或选项出现重复,否则会引发 DuplicateSectionError 或 DuplicateOptionError。 当 empty_lines_in_values 为 False (默认值: True) 时,每个空行均表示一个选项的结束。 在其他情况下,一个多行选项内部的空行会被保留为值的一部分。 当 allow_no_value 为 True (默认值: False) 时,将接受没有值的选项;此种选项的值将为 None 并且它们会以不带末尾分隔符的形式被序列化。

当给定 default_section 时,它将指定存放其他节的默认值和用于插值的特殊节的名称 (通常命名为 "DEFAULT")。 该值可通过使用 default_section 实例属性在运行时被读取或修改。

插值行为可通过给出 interpolation 参数提供自定义处理程序的方式来定制。 None 可用来完全禁用插值,ExtendedInterpolation() 提供了一种更高级的变体形式,它的设计受到了 zc.buildout 的启发。 有关该主题的更多信息请参见 专门的文档章节。

插值中使用的所有选项名称将像任何其他选项名称引用一样通过 optionxform() 方法来传递。 例如,使用 optionxform() 的默认实现(它会将选项名称转换为小写形式)时,值 foo %(bar)s 和 foo %(BAR)s 是等价的。

当给定 converters 时,它应当为一个字典,其中每个键代表一个类型转换器的名称而每个值则为实现从字符串到目标数据类型的转换的可调用对象。 每个转换器会获得其在解析器对象和节代理上对应的 get*() 方法。

在 3.1 版更改:默认的 dict_type 为 collections.OrderedDict。

在 3.2 版更改:添加了 allow_no_value, delimiters, comment_prefixes, strict, empty_lines_in_values, default_section 以及 interpolation。

在 3.5 版更改:添加了 converters 参数。

defaults()

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

sections()

返回可用节的列表;default section 不包括在该列表中。

add_section(section)

向实例添加一个名为 section 的节。 如果给定名称的节已存在,将会引发 DuplicateSectionError。 如果转入了 default section 名称,则会引发 ValueError。 节名称必须为字符串;如果不是则会引发 TypeError。

在 3.2 版更改:非字符串的节名称将引发 TypeError。

has_section(section)

指明相应名称的 section 是否存在于配置中。 default section 不包含在内。

options(section)

返回指定 section 中可用选项的列表。

has_option(section, option)

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

read(filenames, encoding=None)

尝试读取并解析一个包含文件名的可迭代对象,返回一个被成功解析的文件名列表。

If filenames is a string or path-like object, it is treated as a single filename. If a file named in filenames cannot be opened, that file will be ignored. This is designed so that you can specify an iterable of potential configuration file locations (for example, the current directory, the user’s home directory, and some system-wide directory), and all existing configuration files in the iterable will be read.

如果名称对应的文件全都不存在,则 ConfigParser 实例将包含一个空数据集。 一个要求从文件加载初始值的应用应当在调用 read() 来获取任何可选文件之前使用 read_file() 来加载所要求的一个或多个文件:

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 新版功能: encoding 形参。 在之前的版本中,所有文件都将使用 open() 的默认编码格式来读取。

3.6.1 新版功能: filenames 形参接受一个 path-like object。

read_file(f, source=None)

从 f 读取并解析配置数据,它必须是一个产生 Unicode 字符串的可迭代对象(例如以文本模式打开的文件)。

可选参数 source 指定要读取的文件名称。 如果未给出并且 f 具有 name 属性,则该属性会被用作 source;默认值为 '??>'。

3.2 新版功能:替代 readfp()。

read_string(string, source='')

从字符串中解析配置数据。

可选参数 source 指定一个所传入字符串的上下文专属名称。 如果未给出,则会使用 ''。 这通常应为一个文件系统路径或 URL。

3.2 新版功能.

read_dict(dictionary, source='')

从任意一个提供了类似于字典的 items() 方法的对象加载配置。 键为节名称,值为包含节中所出现的键和值的字典。 如果所用的字典类型会保留顺序,则节和其中的键将按顺序加入。 值会被自动转换为字符串。

可选参数 source 指定一个所传入字曲的上下文专属名称。 如果未给出,则会使用 。

此方法可被用于在解析器之间拷贝状态。

3.2 新版功能.

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

获取指定名称的 section 的一个 option 的值。 如果提供了 vars,则它必须为一个字典。 option 的查找顺序为 vars*(如果有提供)、*section 以及 DEFAULTSECT。 如果未找到该键并且提供了 fallback,则它会被用作回退值。 可以提供 None 作为 fallback 值。

所有 '%' 插值会在返回值中被展开,除非 raw 参数为真值。 插值键所使用的值会按与选项相同的方式来查找。

在 3.2 版更改: raw, vars 和 fallback 都是仅限关键字参数,以防止用户试图使用第三个参数作业为 fallback 回退值(特别是在使用映射 协议的时候)。

getint(section, option, *, raw=False, vars=None[, fallback])

将在 section 中指定的 option 强制转换为整数的便捷方法。 参见 get() 获取对于 raw, vars 和 fallback 的解释。

getfloat(section, option, *, raw=False, vars=None[, fallback])

将在 section 中指定的 option 强制转换为浮点数的便捷方法。 参见 get() 获取对于 raw, vars 和 fallback 的解释。

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

将在指定 section 中的 option 强制转换为布尔值的便捷方法。 请注意选项所接受的值为 '1', 'yes', 'true' 和 'on',它们会使得此方法返回 True,以及 '0', 'no', 'false' 和 'off',它们会使得此方法返回 False。 这些字符串值会以对大小写不敏感的方式被检测。 任何其他值都将导致引发 ValueError。 参见 get() 获取对于 raw, vars 和 fallback 的解释。

items(raw=False, vars=None)items(section, raw=False, vars=None)

当未给出 section 时,将返回由 section_name, section_proxy 对组成的列表,包括 DEFAULTSECT。

在其他情况下,将返回给定的 section 中的 option 的 name, value 对组成的列表。 可选参数具有与 get() 方法的参数相同的含义。

set(section, option, value)

如果给定的节存在,则将所给出的选项设为指定的值;在其他情况下将引发 NoSectionError。 option 和 value 必须为字符串;如果不是则将引发 TypeError。

write(fileobject, space_around_delimiters=True)

将配置的表示形式写入指定的 file object,该对象必须以文本模式打开(接受字符串)。 此表示形式可由将来的 read() 调用进行解析。 如果 space_around_delimiters 为真值,键和值之前的分隔符两边将加上空格。

remove_option(section, option)

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

remove_section(section)

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

optionxform(option)

将选项名 option 转换为输入文件中的形式或客户端代码所传入的应当在内部结构中使用的形式。 默认实现将返回 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当 raw 形参为假值时 get() 所采用的递归插值的最大深度。 这只在使用默认的 interpolation 时会起作用。

python 配置文件解析代码_python3从零学习-5.5.2、configparser — 配置文件解析器相关推荐

  1. python的设计哲学_python3从零学习-设计哲学

    python设计哲学 python设计哲学思想可以从python留的彩蛋里面一窥究竟.打开Python控制台,这个我下一节会讲怎么打开python控制台,然后输入import this,就会出现以下内 ...

  2. python普通类实现接口_python3从零学习-5.8.1、socket—底层网络接口

    源代码: Lib/socket.py 这个模块提供了访问BSD*套接字*的接口.在所有现代Unix系统.Windows.macOS和其他一些平台上可用. 这个Python接口是用Python的面向对象 ...

  3. python计算时间差代码_Python3显示当前时间、计算时间差及时间加减法示例代码...

    Python3显示当前时间.计算时间差及时间加减法示例代码 摘要 在使用Python写程序时,经常需要输出系统的当前时间以及计算两个时间之间的差值,或者将当前时间加减一定时间(天数.小时.分钟.秒)来 ...

  4. 向一个无法连接的网络尝试了一个套接字操作_python3从零学习-5.8.1、socket—底层网络接口...

    源代码: Lib/socket.py 这个模块提供了访问BSD*套接字*的接口.在所有现代Unix系统.Windows.macOS和其他一些平台上可用. 这个Python接口是用Python的面向对象 ...

  5. python scapy 抓包_Python3下基于Scapy库完成网卡抓包解析

    Scapy是一个可以让用户发送.侦听和解析并伪装网络报文的Python程序.这些功能可以用于制作侦测.扫描和攻击网络的工具. 在 Python 代码中可以通过 sniff 函数调用抓包分析,并对抓到的 ...

  6. python3 数组大小_python3从零学习-5.1.8、高效的数值数组array

    此模块定义了一种对象类型,可以紧凑地表示基本类型值的数组:字符.整数.浮点数等. 数组属于序列类型,其行为与列表非常相似,不同之处在于其中存储的对象类型是受限的. 类型在对象创建时使用单个字符的类型码 ...

  7. python 通登录银行_Python3 适合初学者学习的银行账户登录系统实例

    一.所用知识点: 1. for循环与if判断的结合 2. %s占位符的使用 3. 辅助标志的使用(标志位) 4. break的使用 二.代码示例: ''' 银行登录系统 ''' uname = &qu ...

  8. csv 字符串_python3从零学习-5.5.1、CSV 文件读写

    源代码: Lib/csv.py 模块内容 csv 模块定义了以下函数: csv.reader(csvfile, dialect='excel', **fmtparams) 返回一个 reader 对象 ...

  9. python3字典升序排序_python3从零学习-4.2、内置数据类型

    内置标准类型: * Boolean(布尔) * Number(数字) * String(字符串) * List(列表) * Tuple(元组) * Sets(集合) * Dictionary(字典) ...

最新文章

  1. 字符间距加宽5磅怎么设置_11层以下住宅小区——消防车道设置及答疑
  2. 重视隐私信息安全,笑迎人脸识别百亿蓝海
  3. 【Tensorflow】tf.nn.depthwise_conv2d如何实现深度卷积?+深度可分离卷积详解
  4. windows xp下安装java8(jdk8)-转
  5. 图像处理:透镜畸变及校正模型
  6. Latex 排版第一页出现空白页
  7. 初恋 张润贞 吉他谱
  8. 用matlab解系统框图,控制系统框图(请教matlab中怎么画控制系统流程框图?)
  9. 基于bim二次开发的智能楼宇管理系统
  10. 一个前端开发者的mac装机清单
  11. tbschedule介绍
  12. java注释/关键字/标识符/常量/
  13. 湖南科技大学2018年C语言程序设计实验题——问题 J: 成绩统计
  14. 东北大学材料成型工艺学中冲压部分复习题
  15. Zbar+ROS+opencv二维码识别与定位研究(一)
  16. minIO如何设置直接通过访问链接在浏览器中打开文件
  17. ubuntu双系统时间不一致现象
  18. java 僵尸进程_神奇的Java僵尸(defunct)进程问题排查过程
  19. 设计模式六大原则(SOLID)
  20. tx2 安装opencv4.1.1及opencv_contrib-4.1.1

热门文章

  1. 关于三星某些系列笔记本电脑无法安装Windows10的原因及解决办法
  2. mongodb更新操作符$inc,$mul
  3. u盘模式 linux hi3518,嵌入式 RT3070_STA驱动移植到hi3518c平台小结
  4. 中学计算机教学叙事范文,初中地理教育叙事范文
  5. ajax velocity,velocity 使用js
  6. php微信个性化菜单,微信公众平台新增个性化菜单接口,实现公众号
  7. Https java信任_java访问非经过信任证书https的方法
  8. Spring-Data-JPA--增删改查2——自定义接口查询
  9. 两个特征是独立好还是正相关好_stata速学|相关分析|主成分分析|因子分析
  10. php7 void,2.10.PHP7.1 女神级教程-女神的私人信息 -【PHP 函数】