YAML-Parsing und Python?

Was ist der beste Weg, um eine YAML-Datei in ein Python-Objekt zu analysieren?

Zum Beispiel, diese YAML:

Person: name: XYZ 

Zu dieser Python-Klasse:

 class Person(yaml.YAMLObject): yaml_tag = 'Person' def __init__(self, name): self.name = name 

Ich benutze PyYamL übrigens.

2 Solutions collect form web for “YAML-Parsing und Python?”

Wenn deine YAML-Datei wie folgt aussieht:

 # tree format treeroot: branch1: name: Node 1 branch1-1: name: Node 1-1 branch2: name: Node 2 branch2-1: name: Node 2-1 

Und du hast PyYAML so installiert:

 pip install PyYAML 

Und der Python-Code sieht so aus:

 import yaml with open('tree.yaml') as f: # use safe_load instead load dataMap = yaml.safe_load(f) 

Die Variable dataMap enthält nun ein Wörterbuch mit den dataMap . Wenn du dataMap mit PrettyPrint dataMap , bekommst du so etwas wie:

 {'treeroot': {'branch1': {'branch1-1': {'name': 'Node 1-1'}, 'name': 'Node 1'}, 'branch2': {'branch2-1': {'name': 'Node 2-1'}, 'name': 'Node 2'}}} 

So, jetzt haben wir gesehen, wie man Daten in unserem Python-Programm erhält. Das Speichern von Daten ist genauso einfach:

 with open('newtree.yaml', "w") as f: yaml.dump(dataMap, f) 

Sie haben ein Wörterbuch, und jetzt müssen Sie es in ein Python-Objekt umwandeln:

 class Struct: def __init__(self, **entries): self.__dict__.update(entries) 

Dann können Sie:

 >>> args = your YAML dictionary >>> s = Struct(**args) >>> s <__main__.Struct instance at 0x01D6A738> >>> s... 

Und folge " Konvertieren von Python dict zum Objekt ".

Für weitere Informationen können Sie sich bei pyyaml.org anschauen .

Von http://pyyaml.org/wiki/PyYAMLDokumentation :

add_path_resolver(tag, path, kind) fügt einen add_path_resolver(tag, path, kind) impliziten tag resolver hinzu. Ein Pfad ist eine Liste von Schlüsseln, die einen Pfad zu einem Knoten im Darstellungsgraphen bilden. Pfadeelemente können Zeichenfolgenwerte, Ganzzahlen oder Keine sein. Die Art eines Knotens kann str, list, dict oder None sein.

 #!/usr/bin/env python import yaml class Person(yaml.YAMLObject): yaml_tag = '!person' def __init__(self, name): self.name = name yaml.add_path_resolver('!person', ['Person'], dict) data = yaml.load(""" Person: name: XYZ """) print data # {'Person': <__main__.Person object at 0x7f2b251ceb10>} print data['Person'].name # XYZ 
  • Sichern Sie SQL zu YAML wie ist
  • Parse YAML und nehmen einen bestimmten Pfad ist immer ein String
  • Python Config Parser (Duplicate Key Support)
  • Warum behalten so viele Apps / Frameworks ihre Konfigurationsdateien in einem nicht ausgeführten Format?
  • Python- und YAML-GAE-App-Einstellungsdatei
  • Controlling Yaml Serialisierung Ordnung in Python
  • Wie überspringe man Zeilen beim Lesen einer Yaml-Datei in Python?
  • Ansible Schreibvariablen in YAML-Datei
  • XML oder YML-Parsing in OpenCV mit Python
  • Pyyaml: dumping ohne tags
  • Die gelernte Darstellung der Daten aus dem unbeaufsichtigten Lernen in pylearn2
  • Python ist die beste Programmiersprache der Welt.