ConfigParser
を使用して、同じキーの複数の値を読み取ることができる必要があります。構成ファイルの例:
[test]
foo = value1
foo = value2
xxx = yyy
の「標準的な」使用では、値を持つConfigParser
1 つのキーがあります。しかし、両方の値を読み取るパーサーが必要です。foo
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")
最初の部分 ( with config
) は、「通常」の構成ファイルを読み取り、(他の値の上書き/削除) のvalue2
値のみを残して、次の期待される出力を取得します。foo
value2
yyy
2 番目の部分 ( config2
) は私のアプローチを使用して複数の値をリストに追加しますが、出力は代わりに
['value1', 'value2', 'value1\nvalue2']
['yyy', 'yyy']
繰り返し値を取り除くにはどうすればよいですか? 次のような出力が期待されます。
['value1', 'value2']
yyy
また
['value1', 'value2']
['yyy']
(すべての値がリストにあるかどうかは気にしません...)。どんな提案でも大歓迎です。