我阅读了
the docs的部分,看到ConfigParser返回一个部分中选项的键/值对列表.我认为在一个部分中键不需要是唯一的,否则解析器只会返回一个映射.我围绕这个假设设计了我的配置文件模式,然后遗憾地意识到情况并非如此:
>>> from ConfigParser import ConfigParser
>>> from StringIO import StringIO
>>> fh = StringIO("""
... [Some Section]
... spam: eggs
... spam: ham
... """)
>>> parser = ConfigParser()
>>> parser.readfp(fh)
>>> print parser.items('Some Section')
[('spam', 'ham')]
然后我回去找到了我应该阅读的文档部分:
Sections are normally stored in a
builtin dictionary. An alternative
dictionary type can be passed to the
ConfigParser constructor. For example,
if a dictionary type is passed that
sorts its keys, the sections will be
sorted on write-back, as will be the
keys within each section.
保留我现有的配置文件方案(我现在非常喜欢;)我正在考虑传递一个像上面提到的类似映射的对象来累积值而不是破坏它们.是否有一种更简单的方法来防止我丢失的键/值崩溃?我应该编写一个ConfigParser本身的变体,而不是制作一个疯狂的适配器(如果ConfigParser的实现发生变化可能会破坏)?
我觉得这可能是那些我只看到困难解决方案的“呃”时刻之一.
[编辑:]这是一个更精确的例子,说明我多次使用相同的密钥:
[Ignored Paths]
ignore-extension: .swp
ignore-filename: tags
ignore-directory: bin
我不喜欢逗号分隔列表语法,因为当你将它缩放到很多值时,它很难看.例如,以逗号分隔的50个扩展名列表将不具有特别的可读性.