我注意到我的源代码控制使用ConfigParser生成的输出文件的内容永远不会以相同的顺序排列。有时,即使没有对值进行任何修改,部分也会更改部分内的位置或选项。
有没有办法在配置文件中对事物进行排序,这样我每次启动应用程序时都不必进行微不足道的更改?
答案 0 :(得分:9)
看起来这已在Python 3.1和2.7中修复,并引入了有序词典:
标准库现在支持使用 几个有序词典 模块。 configparser模块使用 他们默认。这让我们 配置文件被读取,修改, 然后写回他们的 原始订单。
答案 1 :(得分:2)
没有。 ConfigParser库以字典哈希顺序写出内容。 (如果查看源代码,可以看到这一点。)这个模块有替代品可以做得更好。
我会看看是否可以找到并在此处添加。
http://www.voidspace.org.uk/python/configobj.html#introduction是我想到的那个。它不是替代品,但它非常易于使用。
答案 2 :(得分:2)
如果您想比Alexander Ljungberg的答案更进一步,并对各部分的内容和内容进行排序,您可以使用以下内容:
config = ConfigParser.ConfigParser({}, collections.OrderedDict)
config.read('testfile.ini')
# Order the content of each section alphabetically
for section in config._sections:
config._sections[section] = collections.OrderedDict(sorted(config._sections[section].items(), key=lambda t: t[0]))
# Order all sections alphabetically
config._sections = collections.OrderedDict(sorted(config._sections.items(), key=lambda t: t[0] ))
# Write ini file to standard output
config.write(sys.stdout)
这使用OrderdDict字典(以保持排序)并通过覆盖内部_sections字典从ConfigParser外部对读取的ini文件进行排序。
答案 3 :(得分:-1)
ConfigParser基于ini文件格式,在其设计中应该对订单不敏感。如果您的配置文件格式对订单敏感,则无法使用ConfigParser。如果您的ini类型格式对语句的顺序敏感,它也可能会让人感到困惑......