Potrzebuję móc korzystać z ConfigParser
, aby odczytać wiele wartości dla tego samego klucza. Przykładowy plik konfiguracyjny:Jak skonfigurowaćParse plik zachowując wiele wartości dla identycznych kluczy?
[test]
foo = value1
foo = value2
xxx = yyy
z „standardowego” używania ConfigParser
będzie jeden klucz foo
z wartością value2
. Ale potrzebuję analizatora składni do odczytu w obu wartościach.
następstwie entry on duplicate key stworzyłem następujący przykładowy kod:
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")
pierwsza część (z config
) czyta w config file nas „zwykły”, pozostawiając tylko value2
jako wartość dla foo
(nadpisywanie/usuwając inną wartość) i pojawia się następujący, oczekiwany wynik:
value2
yyy
druga część (config2
) wykorzystuje moje podejście do dołączania wielu wartości do li st, ale zamiast tego wyjściowym jest
['value1', 'value2', 'value1\nvalue2']
['yyy', 'yyy']
Jak pozbyć się powtarzających się wartości? Oczekuję wyjście następująco:
['value1', 'value2']
yyy
lub
['value1', 'value2']
['yyy']
(nie mam nic przeciwko, jeśli każda wartość jest na liście ...). Wszelkie sugestie mile widziane.
nie mam pojęcia dlaczego 'Super (OrderedDict, self)' działa, ale nie 'Super (MultiOrderedDict, samo) ". –
Tak, idealnie! Z wyjątkiem anomalii "super". Może to * jest * podstawową klasą 'OrderedDict', a następnie ... – Alex
Czy istnieje sposób na zwrócenie pojedynczej wartości zamiast listy, gdy istnieje tylko jedna wartość? ['value1', 'value2'] i yyy zamiast ['yy '] –