我需要能够使用ConfigParser
读取同一个键的多个值。示例配置文件:
[test]
foo = value1
foo = value2
xxx = yyy
在“标准”使用中ConfigParser
,将有一个foo
带有 value 的键value2
。但我需要解析器读取这两个值。
在重复键上的条目之后,我创建了以下示例代码:
from collections import OrderedDict
from ConfigParser import RawConfigParser
class OrderedMultisetDict(OrderedDict):
def __setitem__(self, key, value):
try:
item = self.__getitem__(key)
except KeyError:
super(OrderedMultisetDict, self).__setitem__(key, value)
return
print "item: ", item, value
if isinstance(value, list):
item.extend(value)
else:
item.append(value)
super(OrderedMultisetDict, self).__setitem__(key, item)
config = RawConfigParser(dict_type = OrderedDict)
config.read(["test.cfg"])
print config.get("test", "foo")
print config.get("test", "xxx")
config2 = RawConfigParser(dict_type = OrderedMultisetDict)
config2.read(["test.cfg"])
print config2.get("test", "foo")
print config.get("test", "xxx")
第一部分(带有config
)读取我们“通常”的配置文件,只留下(覆盖/删除另一个值)value2
的foo
值,我得到以下预期输出:
value2
yyy
第二部分 ( config2
) 使用我的方法将多个值附加到列表中,但输出是
['value1', 'value2', 'value1\nvalue2']
['yyy', 'yyy']
如何摆脱重复值?我期望输出如下:
['value1', 'value2']
yyy
或者
['value1', 'value2']
['yyy']
(我不介意每个值是否都在列表中......)。欢迎任何建议。