类似于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。awt。颜色>java。木卫一。InvalidClassException   java禁用多个日期范围jDateChooser   java为什么我的特例apper会被扔进泽西/灰熊?   JavaIntelliJ比较两个覆盖率数据   java什么是servletsdefault。你怎么办?   单击几下libgdx后java按钮没有响应   使用java将字符串转换为JSONArray   文件系统在java中刷新fileSystemViewer   java如何在hibernate中避免脏检查   java奇怪的问题,带有分号和“无法解决…”   java将值从子面板传递到父面板   HTML JTextPane CSS的Java FontSizeAction   java文件代码神秘地变成了一堆(0000)