Analizujesz plik YAML w Pythonie i uzyskujesz dostęp do danych?

84

Jestem nowy w YAML i szukałem sposobów analizowania pliku YAML i używania / dostępu do danych z przeanalizowanego YAML.

Natknąłem się na wyjaśnienia, jak przeanalizować plik YAML, na przykład samouczek PyYAML , „ Jak mogę przeanalizować plik YAML w Pythonie ”, „ Konwertować dyktowanie Pythona na obiekt? ”, Ale nie znalazłem prosty przykład, jak uzyskać dostęp do danych z przeanalizowanego pliku YAML.

Załóżmy, że mam plik YAML, taki jak:

 treeroot:
     branch1: branch1 text
     branch2: branch2 text

Jak uzyskać dostęp do tekstu „branch1 text”?

Analiza YAML i Python? ” Dostarcza rozwiązania, ale miałem problemy z dostępem do danych z bardziej złożonego pliku YAML. Zastanawiam się, czy istnieje jakiś standardowy sposób uzyskiwania dostępu do danych z przeanalizowanego pliku YAML, prawdopodobnie coś podobnego do notacji „ iteracji drzewa ” lub „ ścieżki elementu ” lub czegoś, co byłoby używane podczas analizowania pliku XML?

9 małp
źródło
Możliwy duplikat How can I parse a YAML file in Python
fmsf

Odpowiedzi:

152

Ponieważ yaml.load()funkcja PyYAML analizuje dokumenty YAML do natywnych struktur danych Pythona, możesz po prostu uzyskać dostęp do elementów za pomocą klucza lub indeksu. Korzystając z przykładu z pytania, które podałeś:

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

Aby uzyskać dostęp branch1 text, użyj:

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

ponieważ w dokumencie YAML wartość branch1klucza jest pod treerootkluczem.

Aphex
źródło
3
Otrzymuję „TypeError: indeksy ciągów muszą być liczbami całkowitymi, a nie str”. Wygląda na to, że nie mogę użyć ciągu znaków jako indeksu.
sattu
Prawdopodobnie próbujesz uzyskać dostęp do ciągu (indeksować go). Możesz iść zbyt głęboko; czy jesteś już w elemencie, do którego próbujesz uzyskać dostęp?
Aphex
@sattu miałem ten sam błąd bo nie miałem spacji pomiędzy kluczem a wartością, czyli "labelsize: 20" zamiast "labelsize: 20"
mateuszb