Eine YAML-Datei in Python analysieren und auf die Daten zugreifen?


82

Ich bin neu in YAML und habe nach Möglichkeiten gesucht, eine YAML-Datei zu analysieren und die Daten aus der analysierten YAML zu verwenden / darauf zuzugreifen.

Ich habe Erklärungen zum Parsen der YAML-Datei gefunden, zum Beispiel das PyYAML- Tutorial " Wie kann ich eine YAML-Datei in Python analysieren ", " Python-Dikt in Objekt konvertieren? ", Aber was ich nicht gefunden habe, ist a einfaches Beispiel für den Zugriff auf die Daten aus der analysierten YAML-Datei.

Angenommen, ich habe eine YAML-Datei wie:

 treeroot:
     branch1: branch1 text
     branch2: branch2 text

Wie greife ich auf den Text "branch1 text" zu?

" YAML-Analyse und Python? " Bietet eine Lösung, aber ich hatte Probleme beim Zugriff auf die Daten aus einer komplexeren YAML-Datei. Und ich frage mich , ob es für den Zugriff auf die Daten von einer analysierten YAML - Datei, die möglicherweise etwas Ähnliches wie „einige Standardmethode ist Baum Iteration “ oder „ elementpath “ Notation oder etwas , das verwendet werden würde , wenn eine XML - Datei Parsen?


Antworten:


150

Da die yaml.load()Funktion von PyYAML YAML-Dokumente in native Python-Datenstrukturen analysiert, können Sie einfach über Schlüssel oder Index auf Elemente zugreifen. Verwenden Sie das Beispiel aus der von Ihnen verlinkten Frage:

import yaml
with open('tree.yaml', 'r') as f:
    doc = yaml.load(f)

Um darauf zuzugreifen branch1 text, würden Sie verwenden:

txt = doc["treeroot"]["branch1"]
print txt
"branch1 text"

weil in Ihrem YAML-Dokument der Wert des branch1Schlüssels unter dem treerootSchlüssel liegt.


3
Ich erhalte "TypeError: Zeichenfolgenindizes müssen Ganzzahlen sein, nicht str". Es scheint, dass ich keinen String für den Index verwenden kann.
— Sattu

Sie versuchen wahrscheinlich, auf eine Zeichenfolge zuzugreifen (diese zu indizieren). Sie könnten zu tief gehen; Sind Sie bereits bei dem Element, auf das Sie zugreifen möchten?
— Aphex

@sattu Ich hatte den gleichen Fehler, weil ich kein Leerzeichen zwischen dem Schlüssel und dem Wert hatte, dh "Labelsize: 20" anstelle von "Labelsize: 20"
— Mateuszb
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.