Python: Lesen der Konfiguration-Datei mit mehreren Zeilen pro Schlüssel
Schreibe ich eine kleine DB-test-suite, die liest Konfigurationsdateien mit Abfragen und die erwarteten Ergebnisse, z.B.:
query = "SELECT * from cities WHERE name='Unknown';"
count = 0
level = 1
name = "Check for cities whose name should be null"
suggested_fix = "UPDATE cities SET name=NULL WHERE name='Unknown';"
Diese funktioniert gut; ich Teile jede Zeile mit Python string.partition('=')
.
Mein problem ist, sehr lange SQL-Abfragen. Derzeit, ich fügen Sie diese Abfragen als one-liner, die ist hässlich und wartbaren.
Ich möchte zu finden eine elegante, Pythonic way zu Lesen, die das Recht der Meinungsäußerung, auch wenn erstreckt sich über viele Zeilen.
Hinweise:
- meine SQL-Abfragen enthalten kann, die
=
- Ich keine Lust, die Idee zwingt
"
s auf der ganzen rechten Seite, denn es gibt viele bestehende Dateien ohne.
EDIT:
ConfigParser ist toll, aber es zwingt mich zu fügen Sie ein Leerzeichen oder Tabs am Anfang jeder Zeile in einem mehrzeiligen Eintrag. Dies kann eine große Schmerzen.
Vielen Dank im Voraus,
Adam
Können Sie das noch näher erläutern? Nicht verstanden Ihr Kommentar.
InformationsquelleAutor Adam Matan | 2010-02-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist fast genau der use-case, dass aus uns wechseln YAML (Wikipedia, python-Implementierung, Dokumentation; vielleicht möchten Sie sich bei JSON als alternative). YAML hat einige Vorteile gegenüber
configparser
oderjson
:pickle
, aber es ist einsafe_load
Funktion in der python-Implementierung, um dieses Problem zu lindern). Das ist schon sinnvoll für etwas so einfaches wie einedatetime
Objekt.Vollständigkeit halber, die wichtigsten Nachteile (IMO):
Beispielsweise
Drucke
+1 gute Idee. Schauen es.
+1 passt die use-case-wunderschön.
InformationsquelleAutor stephan
Die Python-standard-Bibliothek Modul ConfigParser unterstützt diese standardmäßig. Die Konfigurations-Datei muss in ein standard-format:
Die Konfigurationsdatei oben gelesen werden konnten, mit dem folgenden code:
InformationsquelleAutor Tendayi Mawushe
Ich würde dir vorschlagen, einen regulären Ausdruck zu verwenden... könnte Der code so Aussehen zu geben, werden Sie beginnen:
Die Ausgabe dieses Beispiels ist:
Hoffe, das hilft!
Grüße,
Christoph
InformationsquelleAutor tux21b