Ich las den Teil von the docs und sah, dass die ConfigParser
eine Liste der Schlüssel/Wert-Paare für die Optionen innerhalb eines Abschnitts zurückgibt. Ich dachte, dass Schlüssel innerhalb eines Abschnitts nicht eindeutig sein müssen, sonst würde der Parser nur ein Mapping zurückgeben. Ich entwarf meine Config-Datei-Schema um diese Annahme, dann leider klar, dass dies nicht der Fall ist:Python's ConfigParser eindeutige Schlüssel pro Abschnitt
>>> from ConfigParser import ConfigParser
>>> from StringIO import StringIO
>>> fh = StringIO("""
... [Some Section]
... spam: eggs
... spam: ham
... """)
>>> parser = ConfigParser()
>>> parser.readfp(fh)
>>> print parser.items('Some Section')
[('spam', 'ham')]
Dann ging ich zurück und fand den Teil der Dokumente, die ich sollte gelesen haben:
Abschnitte werden normalerweise in einem integrierten Wörterbuch gespeichert. Ein alternativer Dictionary-Typ kann an den ConfigParser-Konstruktor übergeben werden. Beispiel: Wenn ein Dictionary-Typ übergeben wird, der seine Schlüssel sortiert, werden die Abschnitte sortiert nach dem Zurückschreiben, wie die Schlüssel in jedem Abschnitt sein werden.
Um mein bestehende Konfigurationsdatei Schema zu halten (was ich wie jetzt wirklich;) Ich denke, ein Mapping-ähnliches Objekt zugeben, wie oben erwähnt, dass Werte sie statt clobbering ansammelt. Gibt es eine einfachere Möglichkeit, den Schlüssel/Wert-Einsturz zu verhindern, den ich vermisse? Anstatt einen verrückten Adapter zu machen (der könnte brechen, wenn sich die Implementierung der ConfigParser
ändert) sollte ich einfach eine Variante des ConfigParser
selbst schreiben?
Ich habe das Gefühl, dass dies einer dieser "Duh" -Momente sein könnte, in denen ich nur die schwierigen Lösungen sehe.
[Edit:] Hier ist ein präziseres Beispiel dafür, wie Ich mag würde die gleiche Taste mehrmals verwenden:
[Ignored Paths]
ignore-extension: .swp
ignore-filename: tags
ignore-directory: bin
Ich mag nicht die kommagetrennte-Liste Syntax, weil sie auf dem schwer Augen, wenn Sie es auf viele Werte skalieren; Zum Beispiel wäre eine Komma-getrennte Liste von fünfzig Erweiterungen nicht besonders lesbar.
Ich denke, mit Listen wäre besser lesbar als 50 Zeilen 'Ignorieren-Erweiterung: ...' –
Wirklich? Ich stimme nicht zu ... mit jedem in einer separaten Zeile können Sie nur die Liste nach unten scannen - ich habe nie Komma-getrennte Listen von Erweiterungen mit drei Buchstaben gefunden, um hübsch zu sein. Ich erwarte auch, dass Leute, die eine gegebene Option einfach kommentieren wollen, die separaten Zeilen zuträglich sind. – cdleary