YAML

Aus DataScience_Lernen_Wiki
Zur Navigation springen Zur Suche springen

Einleitung

YAML ist eine Markup-Sprache (Auszeichnungssprache) zur seriellen, formatierten Darstellung von Textdaten. Das Akronym YAML steht für YAML Ain’t Markup Language und wurde ab 2001 von Clark Evans, Brian Ingerson und Oren Ben-Kiki entwickelt.
Ursprünglich basierte YAML auf XML; in der folgenden Entwicklung war es jedoch das Ziel, die die Lesbarkeit der Rohdaten von YAML-Dateien für Menschen zu erhöhen, weshalb YAML heute keine Ähnlichkeit mehr hat mit XML. Der Grundgedanke von YAML ist, dass sich jede mögliche Datenstruktur in Form von assoziativen Listen (Schlüssel-Wert-Paare), Listen und Skalaren (Einzelwerten) darstellen lässt.


Installation

YAML ist ein wichtiges Dateiformat in Python; es folgt die Installationsanleitung der Python-Bindings für YAML in gängigen Betriebssystemen.

Windows

Um Python-YAML zu installieren muss zuerst das Python-Packetmanagementprogramm pip installiert werden, wie es in dieser Anleitung beschrieben ist.

Mac-OSX

Die Installation auf Mac/OSX benötigt ebenfalls die Installation von pip. Dies erfolgt durch die Eingabe von

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

im Terminal.

Alle Systeme

Die Python-Bindings für YAML werden mit folgender Eingabe installiert:

pip install pyyaml


Grundlagen

YAML-Dateien sind einfache Textdateien, die mit der Endung .yaml gespeichert werden. Dabei darf eine YAML-Datei beliebige Zeichen außer Einrückung via Tabulator enthalten.
Eine YAMl-Datei ist eine Reihe von Skalaren, Listen und assoziativen Listen. Listen und assoziative Listen können entweder in Block- oder in Inline-Darstellung definiert werden. Beide Optionen werden im folgenden gezeigt.

Skalare

Skalare sind Einzelwerte und können entweder Strings, Zahlen oder bool'sche Werte sein. Strings können sowohl mit einfachen als auch mit doppelten Anführungszeichen gekennzeichnet werden.

number-value: 42
gleitkomma-wert: 3.141592
bool-wert: true
string-wert: 'Hallo'

Dies entspricht den Python-Variablen

gleitkomma-wert = 3.141592
bool-wert = True
string-wert = 'Hallo'

Strings werden, sofern dies möglich ist, auch ohne Anführungszeichen erkannt. Die folgende Zeile ist daher ebenfalls gültiges YAML:

string-wert = Hallo

Listen

Listenelemente werden in der Block-Schreibweise mittels Einrückung und einem Minuszeichen dargestellt:

ritter:
  - Lancelot
  - Gallahead
  - Arthur

Dies entspricht der Python-Liste

ritter = ["Lancelot", "Gallahead", "Arthur"]

In der Inline-Darstellung sieht dieselbe Liste folgendermaßen aus:

ritter: [Lancelot, Gallahead, Arthur]

Assoziative Listen

Assoziative Listen entsprechen Python-Dictionaries. Sie können beliebige Datentypen enthalten. Die Elemente einer assoziativen Liste werden per Einrückung getrennt.
Beachte: Auf den Doppelpunkt des Schlüssels muss ein Leerzeichen und dann der Wert folgen!

zählen:
  eins: false
  zwei: false
  drei: true
  vier: 'nein'
  fünf: 'ganz falsch'

Dies entspricht dem Python-Dictionary

zählen = {"eins": false, "zwei": false, "drei": true, 'vier': 'nein', 'fünf': 'ganz falsch'}

Die Inline-Darstellung dieser assoziativen Liste sieht so aus:

zählen: {eins: false, zwei: false, drei: true, vier: nein, fünf: ganz falsch}


Fortgeschritten

Schachtelung

Die in den Grundlagen vorgestellten, essentiellen Datentypen von YAMl können beliebig ineinander geschachtelt werden:

daten:
  - unbeladene-schwalbe: 0.5
  - gelb: false
    grün: true

Dies entspricht der folgenden Python-Datenstruktur:

daten = [{'unbeladene-schwalbe': 0.5}, {'gelb': False, 'grün': True}]

Kommentare

Kommentare werden mit dem Rautezeichen markiert und können an beliebiger Stelle positioniert werden:

daten:
  # Afrikanisch oder Europäisch?
  - unbeladene-schwalbe: 0.5

Multiple Dokumente

Innerhalb einer einzigen YAML-Datei können multiple Dokumente definiert werden. Diese werden mittels dreier Minuszeichen voneinander getrennt.

Beachte: Auf ein solches Trennzeichen sollte kein Kommentar in der gleichen Zeile folgen!
name: 'John'
---
name: 'Terry'

Sonderzeichen

Die Sonderzeichen ` [] {} : > | ` können in einem String nur verwendet werden, wenn dieser String mit Anführungszeichen eingefasst wurde:

sonderzeichen: "[alle] {eingefasst} :wie> hier|"

Textformatierung

Mit dem Operator | wird die Einrückung inklusive Umbrüchen eines Strings beibehalten:

   der papagei
      ist
        mausetot!

Gegensätzlich dazu bewirkt der Operator >, dass Zeilenumbrüche zusammengefasst werden. Dabei werden Paragraphen mit einer Leerzeile getrennt.

   der papagei, 
   der ist nicht mehr!

    der papagei ist
        mausetot!

Ausgabe:

der papagei,  der ist nicht mehr!

 der papagei ist
     mausetot!


YAML in Python

Die Einbindung von YAML in Python erfolgt denkbar einfach mit load zur Konvertierung von eines YAML-Strings in ein Python-Objekt und mit dump zur Konvertierung eines Python-Objektes in einen YAML-String:

import yaml

data = """zahl: 3.1415926536
string: 'hallo welt'
ritter:
  - Lancelot
  - Gallahead
  - Arthur"""

python_yaml = yaml.load(data)

print(python_yaml)
print(yaml.dump(python_yaml))

Das Ausführen mit Python erzeugt die folgende Ausgabe:

{'zahl': 3.1415926536, 'string': 'hallo welt', 'ritter': ['Lancelot', 'Gallahead', 'Arthur']}
ritter:
- Lancelot
- Gallahead
- Arthur
string: hallo welt
zahl: 3.1415926536

Anstatt die YAML-Struktur im Programm als String zu definieren, kann natürlich der Inhalt einer beliebigen .yml-Datei geladen und verwendet werden!