Seite 1 von 1

Gezielt Variablen in Yaml file lesen/schreiben?

Verfasst: Freitag 12. Juli 2019, 13:59
von eisteetuete
Hallo,

ich würde yaml gerne für größere Projekte einsetzen, scheitere allerdings etwas an der Handhabung. Ich würde gerne Listen oder dictionarys explizit aus der yaml aus- und einlesen. Aktuell kenne ich nur die Möglichkeit, Elemente ohne Namen einzuspeichern und per Index wieder anzusprechen.

Initialisierung:

Code: Alles auswählen

# init data
myList = ['a', 'b']
myDict = {'c': 1, 'd':2}

# Write yaml
with open("test.yml", 'w') as yamlFile:
	yaml.dump(myList, yamlFile, default_flow_style = False)
	yaml.dump(myDict , yamlFile, default_flow_style = False)
Lesen - Ist Zustand:

Code: Alles auswählen

# Read yaml
with open("test.yml", 'r' as yamlFile:
	yamlObject = yaml.load(yamlFile)
	myList = yamlObject[0]
	myDict = yamlObject[1]
Nach dem schreiben gehen mir die Namen der in yaml gespeicherten Daten verloren. Ich würde gerne wie im folgenden auf die Daten zugreifen:

Lesen - Soll Zustand:

Code: Alles auswählen

with open("test.yml", 'r' as yamlFile:
	yamlObject = yaml.load(yamlFile)
	myList = yamlObject['myList']
	myDict = yamlObject['myDict']
Kann mir jemand sagen ob das machbar ist?
Schonmal vielen Dank für alle Ratschläge.

Re: Gezielt Variablen in Yaml file lesen/schreiben?

Verfasst: Freitag 12. Juli 2019, 14:06
von __deets__
Wenn du per Namen auf etwas zugreifen willst, dann hast du zwei Moeglichkeiten:

- du benutzt ein Woerterbuch, das hat ja Namen als Schluessel.
- du benutzt eine Liste, weil dir die Reihenfolge wichtig ist. Dann musst du den Namen irgendwie anders ablegen, zB als zwei-Elementige Liste [name, wert]. Oder wieder als Woerterbuch. Der Zugriff ist dann aber nie so einfach wie in deinem Code, sondern zB durch Hilfsfunktionen zu machen.

Re: Gezielt Variablen in Yaml file lesen/schreiben?

Verfasst: Freitag 12. Juli 2019, 14:20
von __blackjack__
@eisteetuete: Namen schreibt man in Python übrigens klein_mit_unterstrichen. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase). Schau mal in den Style Guide for Python Code.

Edit: Und eingerückt wird vier Leezeichen pro Ebene. Keine Tabs.