类似于configparser的解析器,但用于更新配置文件
configupdater的Python项目详细描述
配置更新程序
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开发。