Мне нужно иметь возможность использовать ConfigParser
для чтения нескольких значений для одного и того же ключа. Пример файла конфигурации:
[test]
foo = value1
foo = value2
xxx = yyy
При "стандартном" использовании ConfigParser
будет один ключ 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")
Первая часть (с config
) читается в файле конфигурации "обычный", оставив только value2
в качестве значения для foo
(перезаписывая/удаляя другое значение), и я получаю следующий ожидаемый вывод
value2
yyy
Вторая часть (config2
) использует мой подход для добавления нескольких значений в список, но вместо этого вывод
['value1', 'value2', 'value1\nvalue2']
['yyy', 'yyy']
Как избавиться от повторяющихся значений? Я ожидаю выход следующим образом:
['value1', 'value2']
yyy
или
['value1', 'value2']
['yyy']
(Я не возражаю, если значение EVERY находится в списке...). Любые предложения приветствуются.