自定义解析器行为 Python 模块 'configparser'。2024年8月29日 | 阅读 7 分钟 利用 ConfigParser 模块来管理任何应用程序的用户文档和文件。文档格式被组织成段;每个段都可以包含用于组织数据的键值对。还支持使用 Python 格式化字符串技术进行键值插值,以构建相互依赖的值(这对于 URL 和消息字符串特别有用)。 ConfigParser 使用的文档格式类似于 Microsoft Windows 旧版本的格式。它由一个或多个命名段组成,每个段都可以包含具有名称和值的单独选项。 Config 文档段是通过查找以 [ 开头的行来识别的。方括号之间的值是段名,可以包含除方括号以外的任何字符。 自定义解析器行为使用它的应用程序几乎和 INI 格式的变体一样多。Python 模块 configparser 在很大程度上支持最广泛的 INI 样式。历史背景主要决定了默认功能,几乎可以肯定,您需要自定义其中一些功能。 影响特定配置解析器工作方式的最常见方法是使用 __init__() 函数选项。 1. Defaults, 默认值:None此选项接受一个键值对字典,该字典将首先放入 DEFAULT 段。这是一种有效的支持紧凑型配置文件的方法,这些配置文件不指定与文档默认值相等的值。 一个技巧:如果您想为特定段指定默认值,请在读取实际文件之前使用 read_dict() 函数。 2. dict_type, 默认值:dict这一系列选项会影响映射协议未来的工作方式以及配置文件将如何显示。使用标准字典,每个段都按照添加到解析器的顺序存储。选项在段内的顺序也是如此。 可以使用替代类型而不是字典,例如,在写回时对段和选项进行排序。 请注意:有方法可以在一次操作中添加一组键值对。当您在这些操作中使用标准字典时,键的顺序将是已排序的。例如 Python 控制台屏幕 3. allow_no_value, 默认值:False一些配置文件已知包含没有值的设置;但是,它们仍然符合 configparser 支持的语法。构造函数中的 allow_no_value 参数可用于指示应接受此类值:例如 Python 控制台屏幕 4. delimiters, 默认值:(':', '=')分隔符是分隔段内键和值的子字符串。一行中第一次出现分隔子字符串被视为分隔符。这意味着值(但不是键)可以包含分隔符。 另请参阅 ConfigParser.write() 的 space_around_delimiters 参数。还有另一种配置是 Comment prefixes,其默认值为 (' ; ', ' # ') 5. inline_comment_prefixes, 默认值:None注释前缀是表示配置文件中有效注释开始的字符串。comment_prefixes 仅用于空行(可选缩进),而 inline_comment_prefixes 可用于每个有效值之后(例如,段名、选项和空行)。默认情况下,内联注释是禁用的,并且 '#' 和 ';' 用作整行注释的前缀。 版本 3.2 中已更改:在 configparser 的早期版本中,行为匹配 comment_prefixes=(';', '#') 和 inline_comment_prefixes=(';',)。 请注意,配置解析器不支持使用注释前缀进行转义。使用 inline_comment_prefixes 可能会阻止用户指定用作注释前缀的字符的值。如果可能,请勿设置 inline_comment_prefixes。在任何情况下,在多行值中将注释前缀字符存储在行首的唯一方法是添加前缀,例如 Python 控制台屏幕 6. strict, 默认值:True当设置为 True 时,解析器在从单个源(使用 read_file() 函数、read_string() 函数或 read_dict() 函数)读取时,不允许任何段或选项重复。建议在新应用程序中使用严格解析器。 版本 3.2 中已更改:在 configparser 的早期版本中,行为匹配 strict=False。 7. empty_lines_in_values, 默认值:True在配置解析器中,值可以跨越多行,只要它们的缩进比保存它们的键更多即可。默认情况下,解析器也允许空行作为值的一部分。同时,键可以任意缩进以进一步提高可读性。结果是,当配置文件变得庞大而复杂时,用户很容易混淆文件结构。例如 Python 控制台屏幕 这可能尤其错误,因此用户可能会检查他们是否使用了相对字体来编辑文件。这就是为什么您的应用程序不需要包含空行的值,并且您应该考虑拒绝它们。每次这都会导致空行分成多个键。在上面的示例中,它将创建两个键,key_s 和 can。 8. default_section, 默认值:configparser.DEFAULTSECT (即:"DEFAULT")允许为其他段或插值目的保留一个默认值段是此库的一个强大概念,它允许用户创建复杂的描述性配置。此段通常称为“DEFAULT”,但可以修改为指向另一个有效的段名。一些常见的值包括“general”或“common”。给定名称用于在从任何源读取时识别默认段,并在将配置写回文件时使用。它的当前值可以通过 parser_instance.default_section 属性检索,并且可以在运行时进行修改(例如,将文件从一种配置转换为另一种配置)。 9. interpolation, 默认值:configparser.BasicInterpolation可以通过 interpolation 参数自定义插值行为。None 可用于关闭插值;ExtendedInterpolation() 函数提供了受 zc.buildout 启发的更高级的变体。更多内容将在专用文档段中介绍。RawConfigParser 的默认值为 None。 10. converters, 默认值:未设置配置解析器提供执行类型转换的选项值获取器。默认情况下,实现了 getint()、getfloat() 和 getboolean() 函数。如果需要其他获取器,用户可以在子类中定义它们,或者传递一个字典,其中每个键是获取器的名称,每个值是一个执行所述转换的可调用对象。例如,传递 {'decimal': decimal.Decimal} 将在解析器对象和所有段代理上添加 getdecimal() 函数。换句话说,可以编写 parser_instance.getdecimal('section', 'key', fallback=0) 和 parser_instance['section'].getdecimal('key', 0)。 如果转换器需要访问解析器的状态,它可以在配置解析器子类上实现为方法。如果此方法的名称以 get 开头,则它将在所有段代理上以类似字典的结构可用(参见上面的 getdecimal() 函数示例)。 |
本文将演示如何使用 PyQt5 开发一个贷款计算器。PyQt5 提供了 Qt v5 的完整 Python 绑定。跨平台 GUI 工具包 PyQt5 是一组 Qt 版本 5 的 Python 绑定。它提供的功能和简单性...
7 分钟阅读
Wordcloud包通过可视化帮助我们了解文本内容中某个单词的频率。为了实现这一点,我们首先需要安装一些包,如pandas、matplotlib和Wordcloud。让我们看看每个包的安装步骤——Pandas的安装 Pandas是...
阅读 3 分钟
在本教程中,我们将学习Python中的命名空间,这是用于组织Python程序中分配给对象的符号名称的结构,为什么命名空间很重要,以及我们如何在Python程序中使用它们。让我们简要介绍一下...
7 分钟阅读
chebyshev.chebcompanion() 方法:chebyshev. chebcompanion() 方法用于提供估计非缩放情况和基多项式的特征值。总是,我们可以说,如果我们使用 numpy.linalg.eigvalsh 来获得特征值,那么特征值将是实数。在此方法中,我们...
阅读 4 分钟
在本教程中,我们将学习 Python pendulum 库。我们将讨论其功能和用法。Python 提供了 datetime 模块,它是处理日期和时间最重要的库之一,它非常灵活,并附带许多有用的方法。然而,...
阅读 6 分钟
Python中的getter和setter与其他面向对象语言中的不同。getter和setter的主要用途是确保面向对象程序中的数据封装。与其他面向对象语言不同,Python中的私有变量不是隐藏字段。一些面向对象语言使用...
阅读 6 分钟
在本Python教程中,我们将探讨如何解决错误、Python中的“syntaxerror return outside function”以及“can't assign to function call”。在Python中使用函数时,会发生函数外返回的错误。在编程方面,函数是非常...
阅读 6 分钟
Python seek() 方法用于更改文件句柄的当前位置。文件句柄就像一个光标,用于定义文件中要读取或写入数据的位置。语法:fi.seek(offset, from_where),其中 fi 是...
阅读 2 分钟
零假设和备择假设是假设检验的两种不同方法。零假设的前提是一个事件(也称为基本事实)。备择假设是与主要假设相悖的推定。想象一个七十多岁的女性,她有...
14 分钟阅读
简介:在本教程中,我们将讨论 pythonping 模块。PythonPing 是一种在 Python 中执行 ping 操作的流畅方式。这允许您像从终端一样向远程设备发送 ICMP 探测。PythonPing 是模块化的,因此您可以将其编写为独立函数或...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India