我刚开始使用ConfigParser并且它看起来很有趣,但我有一个我有的想法。我试图将配置文件中的所有部分与第一部分进行比较。
configurationFile.ini的演示示例:
[DefaultSection]
key1 : value1
key2 : value2
key3 : value3
.
.
.
keyn : valuen
[Section2]
key1 : value5
key2 : value6
key3 : value7
.
.
.
keyn : valuen
[Section3]
key1 : value8
key2 : value9
key3 : value10
.
.
.
keyn : valuen
我要做的是将每个部分与默认部分进行比较,看看子部分是否有任何差异。我想看看所有其余部分的键是否与默认键匹配,我不关心的值。如果密钥不匹配,则应该打印缺少的密钥:
例如:section(n) is missing key(5)
我正在使用双词典,我认为这是找到差异的最合适的方法,但我的技能有限,我找不到解决方案。
加载和解析数据的代码示例:
#!/usr/bin/python
import pprint
import ConfigParser
if __name__ == '__main__':
configObj = ConfigParser.ConfigParser()
configObj.read('configurationFile.ini')
listOfSections = configObj.sections()
doubleDictionary = {}
for section in listOfSections:
doubleDictionary[section] = configObj.items(section)
pprint.pprint(doubleDictionary)
"""{'dictionary_1': [('key_1', 'value_1'),
('key_2', 'value_2'),
('key_3', 'value_3')],
'dictionary_2': [('key_1', 'value_4'),
('key_2', 'value_5')],
'dictionary_3': [('key_1', 'value_6'),
('key_2', 'value_7')]}"""
我想将dictionary_1的所有密钥与configurationFile.ini中的所有字典进行比较。该脚本当然应该是通用的,能够处理n个词典和n个键。
谢谢大家的时间和精力来帮助我。
答案 0 :(得分:0)
我使用特殊的DEFAULT
部分,然后当您读取文件时,configparser将在一个部分中提供缺省密钥。这可能不是您想要的,但如果您创建文件
config = ConfigParser.ConfigParser()
config.set('DEFAULT', 'key1', "value1")
config.set('DEFAULT', 'key2', "value2")
config.set('DEFAULT', 'key3', "value3")
config.add_section('Section2')
config.set('Section2', 'key1', "value5")
config.set('Section2', 'key2', "value2")
with open("configurationFile.ini", 'w') as f:
config.write(f)
然后你可以得到像这样的不同键
config = ConfigParser.ConfigParser()
config.read("configurationFile.ini")
for section in config.sections():
for key in config.options(section):
if config.get(section, key) != config.get('DEFAULT', key):
print key + " of " + section + " differs from default"
请注意key3
的未定义Section2
采用默认值,因此不会报告为不同。但key2
,明确分配了不同的值。
config.sections()
为您提供除了默认值之外的所有部分,因此不必对默认密钥与它们自身进行比较。