Python JSON und YAML

PythonBeginner
Jetzt üben

Einführung

In der modernen Softwareentwicklung werden Daten häufig in standardisierten Formaten gespeichert und übertragen. JSON (JavaScript Object Notation) und YAML (YAML Ain't Markup Language) sind zwei der beliebtesten Formate für alles, von Web-API-Antworten bis hin zu Anwendungskonfigurationsdateien.

In diesem Lab erlernen Sie die grundlegenden Fähigkeiten für den Umgang mit diesen Formaten in Python. Sie beginnen mit dem in Python integrierten json-Modul, um JSON-Daten zu lesen und zu schreiben. Anschließend erkunden Sie YAML als eine für Menschen besser lesbare Alternative und lernen, wie man es mit der ruamel.yaml-Bibliothek parst. Abschließend entdecken Sie die anyconfig-Bibliothek, ein leistungsstarkes Werkzeug, das das Konfigurationsmanagement vereinfacht, indem es Ihnen ermöglicht, Daten aus verschiedenen Dateiformaten zu laden, ohne sich um die zugrunde liegende Implementierung kümmern zu müssen.

Arbeiten mit JSON

In diesem Schritt lernen Sie, wie Sie JSON-Daten serialisieren und deserialisieren. JSON steht für JavaScript Object Notation und ist ein leichtgewichtiges Format zum Speichern und Übertragen von Daten. Es wird häufig verwendet, wenn Daten von einem Server an eine Webseite gesendet werden.

Hinweis: Falls Sie mit der Nutzung der WebIDE (ähnlich wie VS Code) nicht vertraut sind, machen Sie sich bitte zuerst in diesem Lab damit vertraut.

Zuerst schreiben wir ein Python-Dictionary in eine JSON-Datei. Dieser Vorgang wird als Serialisierung bezeichnet.

Öffnen Sie im Dateiexplorer auf der linken Seite die Datei json_handler.py und fügen Sie den folgenden Code hinzu. Dieses Skript erstellt eine neue Datei namens output.json.

## Write JSON file: json.dump() writes Python object as JSON
import json

content = {"name": "Joe", "age": 20}
with open("output.json", "w") as f:  ## Open file in write mode
    json.dump(content, f, indent=2)  ## Write JSON with 2-space indentation

Lassen Sie uns den Code aufschlüsseln:

  • import json: Importiert das in Python integrierte JSON-Modul.
  • content = {"name": "Joe", "age": 20}: Definiert ein Python-Dictionary, das wir speichern möchten.
  • with open("output.json", "w") as f:: Öffnet eine Datei namens output.json im Schreibmodus ("w").
  • json.dump(content, f, indent=2): Schreibt das content-Dictionary im JSON-Format in die Datei f. Das Argument indent=2 formatiert das JSON mit einer Einrückung von 2 Leerzeichen, was es besser lesbar macht.

Führen Sie nun das Skript im Terminal aus, um die Datei zu erstellen:

python3 json_handler.py

Sie werden keine direkte Ausgabe sehen, aber eine neue Datei output.json wurde erstellt. Sie können deren Inhalt mit dem Befehl cat überprüfen:

cat output.json

Sie sollten den formatierten JSON-Inhalt sehen:

{
  "name": "Joe",
  "age": 20
}

Als Nächstes lesen wir eine JSON-Datei in ein Python-Objekt ein. Dieser Vorgang wird als Deserialisierung bezeichnet. Wir lesen die Datei data.json, die für Sie vorbereitet wurde.

Ändern Sie die Datei json_handler.py mit folgendem Code:

## Read JSON file: json.load() parses JSON from file object
import json

with open("data.json", "r") as f:  ## Open file in read mode
    content = json.load(f)  ## Parse JSON and return Python dict/list
    print(content)

Hier ist die Erklärung des neuen Codes:

  • with open("data.json", "r") as f:: Öffnet die vorhandene Datei data.json im Lesemodus ("r").
  • content = json.load(f): Parst die JSON-Daten aus der Datei und konvertiert sie in ein Python-Dictionary.
  • print(content): Gibt das resultierende Dictionary auf der Konsole aus.

Führen Sie das Skript erneut aus:

python3 json_handler.py

Diesmal sehen Sie das Python-Dictionary im Terminal ausgegeben:

{'username': 'labex', 'id': 12345}

Umgang mit YAML

In diesem Schritt erkunden Sie YAML, ein Datenserialisierungsformat, das auf gute Lesbarkeit für Menschen ausgelegt ist. Im Vergleich zu JSON ist YAML oft einfacher manuell zu pflegen und erlaubt Kommentare, was es zu einer beliebten Wahl für Konfigurationsdateien macht.

Python verfügt über keinen integrierten YAML-Parser, daher müssen Sie eine Bibliothek eines Drittanbieters installieren. Es gibt zwei Hauptbibliotheken: PyYaml und ruamel.yaml. Die ruamel.yaml-Bibliothek ist konformer mit der YAML-Spezifikation und eignet sich besser dazu, Kommentare und Formatierungen beim Ändern von Dateien beizubehalten. Wir werden sie in diesem Lab verwenden.

Installieren Sie zunächst ruamel.yaml mit pip:

pip install ruamel.yaml

Sie sehen eine Ausgabe, die die erfolgreiche Installation bestätigt.

Lassen Sie uns nun diese Bibliothek verwenden, um die Datei config.yaml zu lesen. Öffnen Sie die Datei yaml_handler.py im Editor und fügen Sie den folgenden Code hinzu:

## Read YAML file using ruamel.yaml library
from ruamel.yaml import YAML

with open("config.yaml") as f:
    yaml=YAML()  ## Create YAML parser instance
    data = yaml.load(f)  ## Parse YAML and return Python dict/list
    print(data)

Lassen Sie uns den Code durchgehen:

  • from ruamel.yaml import YAML: Importiert die notwendige YAML-Klasse aus der Bibliothek.
  • with open("config.yaml") as f:: Öffnet die Datei config.yaml zum Lesen.
  • yaml=YAML(): Erstellt eine Instanz des YAML-Parsers.
  • data = yaml.load(f): Parst den YAML-Inhalt aus der Datei und konvertiert ihn in ein Python-Objekt (in diesem Fall ein Dictionary).
  • print(data): Gibt die geladenen Daten aus.

Führen Sie das Skript über das Terminal aus:

python3 yaml_handler.py

Die Ausgabe ist die Python-Dictionary-Repräsentation des Inhalts der YAML-Datei:

{'user': {'name': 'Alex', 'email': 'alex@example.com'}}

Verwendung von Anyconfig

In diesem Schritt entdecken Sie das Paket anyconfig, eine sehr praktische Bibliothek, die das zugrunde liegende Format der Konfigurationsdatei abstrahiert. Sie ermöglicht es Ihnen, ein Python-Dictionary aus verschiedenen Formaten wie JSON, YAML, TOML und anderen mit einer einzigen, einfachen Funktion zu laden. Dies ist äußerst nützlich, wenn Ihre Anwendung mehrere Konfigurationsformate unterstützen muss.

Zuerst müssen Sie anyconfig installieren. Da anyconfig ein Backend zum Parsen von YAML benötigt und wir bereits ruamel.yaml installiert haben, wird es dieses automatisch verwenden.

Installieren Sie anyconfig mit pip:

pip install anyconfig

Nachdem die Installation abgeschlossen ist, können Sie anyconfig verwenden, um Konfigurationsdateien zu laden. Lassen Sie uns damit dieselbe Datei config.yaml aus dem vorherigen Schritt laden.

Öffnen Sie die Datei anyconfig_handler.py und fügen Sie den folgenden Code hinzu:

## anyconfig: load configuration files in various formats (JSON, YAML, TOML, etc.)
import anyconfig

## anyconfig.load() auto-detects the file format based on the extension.
conf = anyconfig.load("/home/labex/project/config.yaml")
print(conf)

Dieser Code ist wesentlich einfacher:

  • import anyconfig: Importiert die Bibliothek.
  • anyconfig.load(...): Diese einzelne Funktion öffnet, liest und parst die Datei. Sie erkennt automatisch, dass config.yaml eine YAML-Datei ist, und verwendet den entsprechenden Parser. Beachten Sie, dass wir hier einen absoluten Pfad verwenden, was eine bewährte Methode ist, wenn der Speicherort des Skripts variieren kann.

Führen Sie nun das Skript aus:

python3 anyconfig_handler.py

Da dieses Beispiel weiterhin config.yaml lädt, ist die Ausgabe identisch mit dem vorherigen Schritt, aber der erforderliche Code ist prägnanter und flexibler.

{'user': {'name': 'Alex', 'email': 'alex@example.com'}}

Mit anyconfig können Sie auch "config.yaml" durch "data.json" ersetzen und das Skript erneut ausführen. Der Code funktioniert weiterhin ohne weitere Änderungen, aber das ausgegebene Dictionary spiegelt nun den Inhalt von data.json anstelle der YAML-Datei wider.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie man mit zwei gängigen Datenserialisierungsformaten in Python arbeitet: JSON und YAML. Diese Fähigkeiten sind grundlegend für Aufgaben wie die Arbeit mit Web-APIs, die Verwaltung von Anwendungskonfigurationen und den Datenaustausch.

Sie begannen mit dem in Python integrierten json-Modul und verwendeten json.dump(), um ein Python-Dictionary in eine JSON-Datei zu serialisieren, sowie json.load(), um eine JSON-Datei wieder in ein Python-Objekt zu deserialisieren.

Anschließend haben Sie YAML als eine für Menschen lesbare Alternative zu JSON erkundet. Sie haben gelernt, wie man die ruamel.yaml-Bibliothek installiert und verwendet, um eine YAML-Datei zu parsen.

Abschließend wurden Sie mit der anyconfig-Bibliothek vertraut gemacht, einem leistungsstarken Werkzeug, das das Konfigurationsmanagement vereinfacht. Sie haben gesehen, wie die Funktion anyconfig.load() Daten aus verschiedenen Dateiformaten lesen kann, ohne dass formatspezifischer Code erforderlich ist, was Ihre Anwendungen flexibler und wartungsfreundlicher macht.