Python:
Arbeiten mit YAML
Wie:
Das Lesen und Schreiben von YAML in Python erfordert in der Regel die Verwendung einer Drittanbieter-Bibliothek, wobei PyYAML
die beliebteste ist. Um zu beginnen, müssen Sie PyYAML installieren, indem Sie pip install PyYAML
ausführen.
Beispiel: In eine YAML-Datei schreiben
import yaml
data = {'a list': [1, 42, 3.141, 1337, 'help', u'€'],
'a string': 'boo!',
'another dict': {'foo': 'bar', 'key': 'value', 'the answer': 42}}
with open('example.yaml', 'w') as f:
yaml.dump(data, f, default_flow_style=False)
# Das erstellt `example.yaml` mit den Daten im YAML-Format strukturiert.
Beispiel: Aus einer YAML-Datei lesen
import yaml
with open('example.yaml', 'r') as f:
data_loaded = yaml.safe_load(f)
print(data_loaded)
# Ausgabe:
# {'a list': [1, 42, 3.141, 1337, 'help', '€'],
# 'a string': 'boo!',
# 'another dict': {'foo': 'bar', 'key': 'value', 'the answer': 42}}
YAML für Konfiguration verwenden
Viele Programmierer verwenden YAML zur Verwaltung von Anwendungskonfigurationen. Hier ist ein Beispiel, wie man eine Konfigurationsdatei strukturieren und lesen könnte:
config.yaml:
database:
host: localhost
port: 5432
username: admin
password: secret
Lesen der Konfigurationsdatei in Python:
import yaml
with open('config.yaml', 'r') as f:
config = yaml.safe_load(f)
print(config['database']['host']) # Ausgabe: localhost
Umgang mit komplexen Strukturen
Für komplexe Strukturen ermöglicht PyYAML, benutzerdefinierte Python-Objekte zu definieren. Sorgen Sie jedoch für sichere Praktiken, indem Sie safe_load
verwenden, um das Ausführen beliebiger Funktionen oder Objekte zu vermeiden.
import yaml
# Ein Python-Objekt definieren
class Example:
def __init__(self, value):
self.value = value
# Benutzerdefinierter Konstruktor
def constructor_example(loader, node):
value = loader.construct_scalar(node)
return Example(value)
# Konstruktor für das Tag "!example" hinzufügen
yaml.add_constructor('!example', constructor_example)
yaml_str = "!example 'data'"
loaded = yaml.load(yaml_str, Loader=yaml.FullLoader)
print(loaded.value) # Ausgabe: data
In diesem Ausschnitt ist !example
ein benutzerdefiniertes Tag, das verwendet wird, um ein Example
Objekt mit dem Wert ‘data’ aus einem YAML-String zu instanziieren. Benutzerdefinierte Lader wie dieser erweitern die Flexibilität von PyYAML und ermöglichen die Verarbeitung komplexerer Datenstrukturen und Typen.