类似于configparser的解析器,但用于更新配置文件

configupdater的Python项目详细描述


https://travis-ci.org/pyscaffold/configupdater.svg?branch=masterReadTheDocsCoverallsPyPI-Server

配置更新程序

ConfigUpdater的唯一目的是方便地更新ini配置文件 对原始文件没有任何更改,除了预期的更改。这意味着 注释、节和键/值对的顺序以及 案件按原始档案保存。因此,configupdater提供 python的ConfigParser的补充功能,它主要是 用于读取配置文件和写入new文件。

功能

ConfigParser的主要区别是:

  • 更新配置文件中的微创更改,
  • 正确处理评论,
  • 一次只能更新一个配置文件,
  • 值中的空行无效,
  • 保留节和键的原始大小写,
  • 控制新节/键的位置

以下功能是故意不实现的

  • 值的插值,
  • 从默认部分传播参数,
  • 值的转换,
  • 传递带default参数的键/值对,
  • 允许重复节和键的非严格模式。

使用量

首先使用以下命令安装软件包:

pip install configupdater

现在我们可以简单地做到:

from configupdater import ConfigUpdater

updater = ConfigUpdater()
updater.read_file('setup.cfg')

它将读取在许多项目中找到的文件setup.cfg

若要更改现有密钥的值,可以简单地执行:

updater['metadata']['author'].value = "Alan Turing"

在任何时候,我们都可以使用以下命令打印配置文件的当前状态:

print(updater)

要更新读取文件,只需调用updater.update_file()updater.write('filename') 将更改的配置文件写入另一个目标。在写之前, configupdater将自动检查更新的配置文件是否仍然有效 在configparser的帮助下分析它。

许多ConfigParser的方法仍然存在,最好在{a8}中查找它们。 让我们看一些例子。

添加和删除选项

假设字符串中有以下配置:

cfg = """
[metadata]
author = Ada Lovelace
summary = The Analytical Engine
"""

我们可以添加一个license选项,即一个密钥/值对,就像使用configparser一样:

updater = ConfigUpdater()
updater.read_string(cfg)
updater['metadata']['license'] = 'MIT'

一个简单的print(updater)将显示新选项已附加到末尾:

[metadata]
author = Ada Lovelace
summary = The Analytical Engine
license = MIT

既然许可证对我们来说非常重要,那么假设我们想在^{tt6}之前添加它$ 甚至在它之前添加一个简短的评论:

updater = ConfigUpdater()
updater.read_string(cfg)
(updater['metadata']['summary'].add_before
                               .comment("Ada would have loved MIT")
                               .option('license', 'MIT'))

这将导致:

[metadata]
author = Ada Lovelace
# Ada would have loved MIT
license = MIT
summary = Analytical Engine calculating the Bernoulli numbers

使用add_after会得到相同的结果,看起来像:

updater = ConfigUpdater()
updater.read_string(cfg)
(updater['metadata']['author'].add_after
                              .comment("Ada would have loved MIT")
                              .option('license', 'MIT'))

假设我们想将summary重命名为更常见的description

updater = ConfigUpdater()
updater.read_string(cfg)
updater['metadata']['summary'].key = 'description'

如果我们根本不需要摘要,我们可以只做del updater['metadata']['summary']

添加和删除节

添加和删除节的工作方式与添加和删除选项的工作方式类似,但级别更高。 坚持我们的ada lovelace示例,假设我们想添加一个optionsjust 在metadata之前,用一个注释和两个新行将其与metadata分隔开:

updater = ConfigUpdater()
updater.read_string(cfg)
(updater['metadata'].add_before
                    .comment("Some specific project options")
                    .section("options")
                    .space(2))

如所料,这将导致:

# Some specific project options
[options]

[metadata]
author = Ada Lovelace
summary = The Analytical Engine

我们现在可以用以前学过的选项来填充新的部分。如果我们想重新命名 一个现有的部分,我们可以在^ {tT12}$属性:

的帮助下完成这一点。
updater['metadata'].name = 'MetaData'

有时,插入一个新的部分可能有用,不是以编程的方式,而是以更声明的方式。 假设我们已经在多行字符串中定义了新的部分:

sphinx_sect_str = """
[build_sphinx]
source_dir = docs
build_dir = docs/_build
"""

在两个configupdater对象的帮助下,我们可以轻松地将此部分插入到示例中:

sphinx = ConfigUpdater()
sphinx.read_string(sphinx_sect_str)
sphinx_sect = sphinx['build_sphinx']

updater = ConfigUpdater()
updater.read_string(cfg)

(updater['metadata'].add_after
                    .space()
                    .section(sphinx_sect))

这将导致:

[metadata]
author = Ada Lovelace
summary = The Analytical Engine

[build_sphinx]
source_dir = docs
build_dir = docs/_build

有关configupdater的api如何工作的更多示例,最好查看 unit tests并阅读参考文献。

注释

configupdater主要为PyScaffold开发。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java有没有工具可以将zephyr转换为velocity模板?   java在安卓 studio中从JSON响应中获取值   jvm如何在Java中设计一个好的permgen空间字符串?   java如何防止Rest webservice使用被盗令牌进行身份验证   java无法遍历列表JSTL   找不到用于ResourceServerTokenServices的java Bean SpringSecurityOauth2   java子字符串替换问题   爪哇玻璃鱼3。十、 以编程方式处理任意HTTPSession的终止   java如何检查输入是否为整数,并在最后添加一个命令来重新启动while循环?   引发java ical4j 1.0.6不可解析日期异常   Java等价于Delphi的DBCtrlGrid?   如果发生错误,java将查找下一个预期标记ANTLR 3   java自打开应用程序(创建锁屏)   java为什么netty有自己的ConcurrentHashMap?   Gradle任务中的java拉取和运行依赖项   继承与Java继承的混淆   java使用shell脚本中的版本执行jar   java我无法让Sqlite数据库与带有Maven的JavaFX应用程序IDE Eclipse包正确通信   java控制台日志未通过org打印。阿帕奇。hadoop。mapreduce。作业的waitForCompletion(true)方法   JAVAlang.NoSuchMethodError:apachestorm螺栓中的spring getrequest