Devo essere in grado di utilizzare ConfigParser
per leggere più valori per la stessa chiave. Esempio file di configurazione:Come configParse un file mantenendo più valori per chiavi identiche?
[test]
foo = value1
foo = value2
xxx = yyy
Con l'uso 'normale' di ConfigParser
ci sarà una chiave foo
con il valore value2
. Ma ho bisogno che il parser legga in entrambi i valori.
A seguito di una entry on duplicate key ho creato il seguente codice di esempio:
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")
La prima parte (con config
) legge nella configurazione noi file 'solito', lasciando solo value2
come valore per foo
(sovrascrivendo/eliminando l'altro valore) ed ottengo il seguente, uscita prevista:
value2
yyy
la seconda parte (config2
) utilizza il mio approccio per aggiungere più valori a una Li ma l'output è invece
['value1', 'value2', 'value1\nvalue2']
['yyy', 'yyy']
Come si eliminano i valori ripetitivi? Mi aspetto un output come segue:
['value1', 'value2']
yyy
o
['value1', 'value2']
['yyy']
(non mi importa se ogni valore è in una lista ...). Qualsiasi suggerimento benvenuto.
Non ho idea del motivo per cui 'super (OrderedDict, auto)' opere, ma non 'super (MultiOrderedDict, auto) '. –
Sì, perfetto! Tranne l'anomalia 'super'. Forse è * la * base di 'OrderedDict' quindi ... – Alex
Esiste un modo per rendere questo ritorno un valore singolo invece di una lista quando c'è un solo valore? ['value1', 'value2'] e yyy invece di ['yyy'] –