Python: Ordentliches Konfigurationsdateiformat

7

Ich möchte ein Konfigurationsdateiformat verwenden, das Schlüsselwertpaare und verschachtelbare, wiederholbare Strukturen unterstützt und das so wenig Syntax wie möglich enthält. Ich stelle mir etwas vor wie:

%Vor%

Ich wäre auch mit etwas zufrieden, das einen signifikanten Leerraum verwendet.

JSON benötigt zu viele explizite Syntaxregeln (Zitate, Kommas usw.). YAML ist eigentlich ziemlich gut, würde aber erfordern, dass die Jobs als YAML-Liste definiert werden, was ich etwas peinlich finde.

    
miracle2k 09.06.2010, 16:27
quelle

6 Antworten

13

Ich denke, YAML ist großartig für diesen Zweck, eigentlich:

%Vor%

Oder als Diktat statt Liste:

%Vor%

Eine weitere Sache, die Sie möglicherweise nicht in Betracht ziehen, ist die Python-Quelle für die Konfiguration. Sie können Python-Dicts und Listen sehr gut lesbar verschachteln und es bietet mehrere unerwartete Vorteile. Django verwendet beispielsweise Python-Quellen für seine Einstellungsdateien.

    
Eli Bendersky 09.06.2010, 16:30
quelle
8

Da Pythons eingebautes configparser -Modul anscheinend keine verschachtelten Abschnitte unterstützt, würde ich zuerst ConfigObj ausprobieren . (Siehe ein Einführungstutorial hier ). Laut seiner Homepage ist dies der Satz von Funktionen erwähnenswert:

  • Verschachtelte Abschnitte (Unterabschnitte) auf jeder Ebene
  • Listenwerte
  • Mehrere Zeilenwerte
  • String-Interpolation (Substitution)
  • Integriert in ein leistungsfähiges Validierungssystem
    • einschließlich automatischer Typprüfung / Konvertierung
    • wiederholte Abschnitte
    • und Zulassen von Standardwerten
  • Beim Schreiben von Konfigurationsdateien behält ConfigObj alle Kommentare und die Reihenfolge der Elemente und Abschnitte
  • bei
  • Viele nützliche Methoden und Optionen zum Arbeiten mit Konfigurationsdateien (wie die 'reload' Methode)
  • Volle Unicode-Unterstützung

ConfigObj wird von Bazaar, Trac, IPython, matplotlib und vielen anderen großen Python-Projekten verwendet es scheint mir ziemlich reif und stabil zu sein (obwohl ich es nie selbst benutzt habe).

    
Tamás 09.06.2010 17:00
quelle
2

Ich denke, du solltest die libconfig-Bibliothek Ссылка überprüfen. Es sollte irgendwo Python-Bindungen dafür geben.

Eine andere Lösung ist das json-Format, das bereits von Python selbst bereitgestellt wird. Suchen Sie die Dokumentation für das JSON-Modul.

    
Zuljin 09.06.2010 16:56
quelle
1

Warum erfinde ich das Rad neu? Sie können Folgendes verwenden:

Ссылка

    
W Devauld 09.06.2010 16:32
quelle
0

Sie können das Konfigurationssystem von red-dove verwenden.

Ссылка

    
mgautierfr 09.06.2010 16:33
quelle
0

Sie können Jsonnet auch dann in Erwägung ziehen, wenn Ihre Anforderungen diese anderen Optionen überschreiten. Jsonnet ist eine Erweiterung von JSON, die auf den ersten Blick Kommentare hinzufügt, Kommatregeln lockert und so viele Zitate überflüssig macht. Aber wenn Sie genauer hinschauen, sehen Sie, dass es wirklich eine voll funktionsfähige Programmiersprache bietet und Unterstützung für die Template-Erweiterung über Mixins, Dateiimporte usw. bietet. Es gibt eine Python-Bindung dafür, aber seine tatsächliche Implementierung ist C ++.

    
Dave Cunningham 09.09.2014 18:22
quelle