保持ConfigParser输出文件排序

时间:2009-07-15 21:03:18

标签: python configuration configparser

我注意到我的源代码控制使用ConfigParser生成的输出文件的内容永远不会以相同的顺序排列。有时,即使没有对值进行任何修改,部分也会更改部分内的位置或选项。

有没有办法在配置文件中对事物进行排序,这样我每次启动应用程序时都不必进行微不足道的更改?

4 个答案:

答案 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类型格式对语句的顺序敏感,它也可能会让人感到困惑......