Ich verwende ConfigParser
, um die Laufzeitkonfiguration eines Skripts zu lesen.
Ich möchte die Flexibilität haben, keinen Abschnittsnamen anzugeben (es gibt Skripte, die einfach genug sind; sie benötigen keinen 'Abschnitt'). ConfigParser
löst eine NoSectionError
Ausnahme aus und akzeptiert die Datei nicht.
Wie kann ich ConfigParser dazu bringen, einfach die (key, value)
Tupel einer Konfigurationsdatei ohne Abschnittsnamen abzurufen ?
Zum Beispiel:
key1=val1
key2:val2
Ich würde lieber nicht in die Konfigurationsdatei schreiben.
python
parsing
configuration-files
Escualo
quelle
quelle
Antworten:
Alex Martelli bot eine Lösung für
ConfigParser
das Parsen von.properties
Dateien (bei denen es sich anscheinend um abschnittslose Konfigurationsdateien handelt).Seine Lösung ist ein dateiähnlicher Wrapper, der automatisch eine Dummy-Abschnittsüberschrift einfügt, um
ConfigParser
die Anforderungen zu erfüllen .quelle
Erleuchtet von dieser Antwort von jterrace , habe ich folgende Lösung gefunden:
EDIT für zukünftige Googler: Ab Python 3.4+
readfp
ist veraltet undStringIO
wird nicht mehr benötigt. Stattdessen können wirread_string
direkt verwenden:quelle
Sie können dies in einer einzigen Codezeile tun.
Stellen Sie in Python 3 Ihren Konfigurationsdateidaten einen gefälschten Abschnittsheader voran und übergeben Sie ihn an
read_string()
.Sie können auch
itertools.chain()
eine Abschnittsüberschrift für simulierenread_file()
. Dies ist möglicherweise speichereffizienter als der oben beschriebene Ansatz. Dies kann hilfreich sein, wenn Sie große Konfigurationsdateien in einer eingeschränkten Laufzeitumgebung haben.Stellen Sie in Python 2 Ihren Konfigurationsdateidaten einen gefälschten Abschnittsheader voran, wickeln Sie das Ergebnis in ein
StringIO
Objekt ein und übergeben Sie es anreadfp()
.Bei jedem dieser Ansätze sind Ihre Konfigurationseinstellungen in verfügbar
parser.items('top')
.Sie können StringIO auch in Python 3 verwenden, möglicherweise aus Gründen der Kompatibilität mit alten und neuen Python-Interpreten. Beachten Sie jedoch, dass es jetzt im
io
Paket enthalten ist undreadfp()
jetzt veraltet ist.Alternativ können Sie einen TOML- Parser anstelle von ConfigParser verwenden.
quelle
Sie können die ConfigObj-Bibliothek verwenden, um dies einfach zu tun: http://www.voidspace.org.uk/python/configobj.html
Aktualisiert: Den neuesten Code finden Sie hier .
Wenn Sie unter Debian / Ubuntu arbeiten, können Sie dieses Modul mit Ihrem Paketmanager installieren:
Ein Anwendungsbeispiel:
quelle
Der einfachste Weg, dies zu tun, ist meiner Meinung nach die Verwendung des CSV-Parsers von Python. Hier ist eine Lese- / Schreibfunktion, die diesen Ansatz demonstriert, sowie ein Testtreiber. Dies sollte funktionieren, sofern die Werte nicht mehrzeilig sein dürfen. :) :)
quelle
csv
Moduls zur Lösung häufigerConfigParser
Beschwerden. Einfacher verallgemeinert und sowohl Python 2 als auch 3-kompatibel gemacht .Nachdem ich selbst auf dieses Problem gestoßen war, schrieb ich einen vollständigen Wrapper an ConfigParser (die Version in Python 2), der Dateien ohne Abschnitte transparent lesen und schreiben kann, basierend auf Alex Martellis Ansatz, der mit der akzeptierten Antwort verknüpft ist. Es sollte ein Ersatz für jede Verwendung von ConfigParser sein. Veröffentlichen Sie es, falls jemand, der dies benötigt, diese Seite findet.
quelle
In der Antwort von Blueicefield wurde configobj erwähnt, aber die ursprüngliche Bibliothek unterstützt nur Python 2. Sie verfügt jetzt über einen Python 3+ -kompatiblen Port:
https://github.com/DiffSK/configobj
APIs haben sich nicht geändert, siehe Dokument .
quelle