Gezielt Variablen in Yaml file lesen/schreiben?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
eisteetuete
User
Beiträge: 1
Registriert: Freitag 12. Juli 2019, 08:18

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.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Benutzeravatar
__blackjack__
User
Beiträge: 14044
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Antworten