使用Python ConfigParser的多个配置文件

cra*_*sic 27 python configuration

调用ConfigParser.read时,您可以传递与配置文件的潜在位置相对应的字符串列表,该函数返回已成功读取的文件列表.

加载具有重叠部分/键的多个配置文件时的默认行为是什么?列表中的后续文件是否会覆盖之前的文件?整个部分是否被覆盖或只是冲突的键?

cra*_*sic 24

在开始测试之后,ConfigParser会用每个连续文件覆盖密钥,文件读取的顺序取决于传递给ConfigParser.read的列表中文件名的顺序.


jay*_*bee 16

只是为了进一步详细说明.

我可以创建以下两个文件: config1.ini

# ** config1.ini **
[shared]
prop_uniue1 = 1
prop_shared = 10

[unique1]
test_unique = 101
Run Code Online (Sandbox Code Playgroud)

并且config2.ini:

# ** config2.ini **
[shared]
prop_uniue2 = 2
prop_shared = 14

[unique2]
test_unique = 102
Run Code Online (Sandbox Code Playgroud)

然后,如果我运行以下操作,我可以看到配置如何更新(输出在相应的打印语句后显示为注释):

import ConfigParser

config = ConfigParser.ConfigParser()
config.read(['config1.ini', 'config2.ini'])


print config.sections() # ['shared', 'unique1', 'unique2']
print config.get("shared", "prop_uniue1")  # 1
print config.get("shared", "prop_shared")  # 14
print config.get("unique1", "test_unique") # 101

print config.get("shared", "prop_uniue2")  # 2
print config.get("unique2", "test_unique") # 102
Run Code Online (Sandbox Code Playgroud)

总结一下它会出现:

  • 正如@crasic所说,文件读取的顺序取决于文件名出现在read方法列表中的顺序,
  • 密钥被后来的文件覆盖,但这是在较低的选项级别而不是较高的部分级别完成的.这意味着如果您具有在以后的文件中不会出现的选项,即使该部分确实发生,也将使用早期文件中的选项.