Wenn Sie einfach identisch benannte Abschnitte zusammenführen möchten (der letzte gewinnt), übergeben Sie einfach die strict=False
Option an den Konstruktor (in Python 3.2 hinzugefügt). Sie erhalten effektiv dict.update()
Verhalten wie die Duplikatsabschnitte in verschmolzen werden.
Config = configparser.ConfigParser(strict=False)
Es ist jedoch klar von der Probendaten OP, die identisch benannten Abschnitte müssen getrennt gehalten werden, um Datenverlust zu vermeiden. ConfigParser
speichert die gelesenen Abschnitte in einem Wörterbuch, sodass mehrere Abschnitte mit demselben Namen nicht behandelt werden können. Zum Glück akzeptiert der Konstruktor ein dict_type
Argument, mit dem Sie ein anderes Dictionary-ähnliches Objekt angeben können. Sie können das verwenden, um identisch benannte Abschnitte zu unterstützen. Hier ist eine grobe Lösung, die die Sektionsnamen durch Anhängen einer eindeutigen Nummer verändert, sobald ein Sektionsname zuvor gesehen wurde.
from collections import OrderedDict
class multidict(OrderedDict):
_unique = 0 # class variable
def __setitem__(self, key, val):
if isinstance(val, dict):
self._unique += 1
key += str(self._unique)
OrderedDict.__setitem__(self, key, val)
Config = configparser.ConfigParser(defaults=None, dict_type=multidict, strict=False)
Mit ein wenig Arbeit sollten Sie in der Lage sein, eine sauberere Lösung zu konstruieren.
Haben Sie die Kontrolle über die Konfigurationsdateiformat? Wenn ja, ändere es zu etwas, das 'configparser' besser mag. –
Ich kann das Dateiformat nicht ändern. – ExyTab
Ich würde vorschlagen, Sie schreiben Ihren eigenen Parser dafür. – aquavitae