我需要能夠使用ConfigParser
來讀取同一個鍵的多個值。實施例的配置文件:如何配置保存相同密鑰的多個值的文件?
[test]
foo = value1
foo = value2
xxx = yyy
隨着「標準」使用ConfigParser
會有一個密鑰foo
與值value2
。但是我需要解析器來讀取這兩個值。
以下內容的entry on duplicate key我已經創建了下面的示例代碼:
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
)使用我的方法進行多值追加到李st,但輸出反而是
['value1', 'value2', 'value1\nvalue2']
['yyy', 'yyy']
如何擺脫重複值?我如下預期輸出:
['value1', 'value2']
yyy
或
['value1', 'value2']
['yyy']
(如果每個值是在列表中,我不介意......)。歡迎任何建議。
我不知道爲什麼'超(OrderedDict,個體經營)'的作品,但不是'超(MultiOrderedDict,個體經營)'。 – 2013-04-06 09:22:50
是的,完美!除了「超級」異常。也許它*是* OrderedDict'的基類然後... – Alex 2013-04-06 09:43:50
當只有一個值時,有什麼辦法可以讓這個返回一個單值而不是一個列表? ['value1','value2']和yyy而不是['yyy'] – 2014-02-20 12:00:59