YAML Ain't Markup Language (YAML) ist eine Sprache zur Serialisierung von Daten für die meisten Programmiersprachen. Lassen Sie uns das im Detail verstehen.
YAML eine strenge Obermenge von JSONso dass alles, was in JSON kann geparst werden zu YAML. Es wird hauptsächlich für Konfigurationsdateien in Projekten verwendet und ist super einfach zu verstehen und den Code zu lesen.
Die Dateierweiterung für YAML-Dateien lautet .yaml
oder .yml
In diesem Tutorium werden wir verschiedene Datentypen kennenlernen, die in YAML und mit YAML in Python arbeiten. Am Ende dieses Tutorials werden Sie in der Lage sein, YAML und seine Syntax zu verstehen.
Ich gehe davon aus, dass Sie mit Python vertraut sind, falls nicht, lesen Sie bitte Python-Lernressourcen.
YAML folgt einer ähnlichen Einrückungssyntax wie Python. Allerdings erlaubt es nicht Registerkarte (merken Sie sich diese beim Schreiben von YAML-Dateien) für die Einrückung.
Einrichtung
- Installieren Sie ein Python-Modul namens
pyyaml
zur Arbeit mit YAML Dateien.
pip install pyyaml
- Kopieren Sie den folgenden Code, fügen Sie ihn in eine Datei ein und speichern Sie ihn als
yaml_script.py
import yaml
yaml_file = open("learn_yaml.yaml", 'r')
yaml_content = yaml.load(yaml_file)
print("Key: Value")
for key, value in yaml_content.items():
print(f"{key}: {value}")
- Wir werden das obige Skript verwenden, um den YAML-Code in Python zu konvertieren und verschiedene Datentypen zu überprüfen.
- Erstellen Sie eine Datei namens
learn_yaml.yaml
und üben Sie darin verschiedene Beispiele, die wir in diesem Tutorium besprechen werden.
Kommen wir nun zu den Datentypen von YAML.
Datentyp in YAML
Alles im YAML ist eine Schlüssel-Wert Paar.
In verschiedenen Programmiersprachen gibt es unterschiedliche Bezeichnungen für Schlüssel-Wert-Paare, wie z.B. Dictionaries, Hashes, Objects, usw. Diese sind Bausteine von YAML.
Die Schlüssel können Strings (in Anführungszeichen oder normal), Floats oder Integers sein (die Unterstützung kann sich in einem zukünftigen Update ändern). Die Werte können von jedem Datentyp sein, den YAML unterstützt.
Schauen wir uns die verschiedenen Datentypen in YAML an.
Zahlen
YAML unterstützt Ganzzahlen, Gleitkommazahlen und exponentielle Gleitkommazahlen.
integer: 123
float: 123.123
exponential_float: 1.34e+3
Wenn Sie den obigen Code mit dem Python-Skript auswerten, erhalten Sie das folgende Ergebnis.
Key: Value
integer: 123
float: 123.123
exponential_float: 1340.0
Wir können die Werte in verschiedenen Zahlensystemen darstellen wie dezimal, oktal, und hexadezimal.
- Der führende null(0) steht für eine oktale Zahl.
- Die Vorsilbe 0x steht für seinen hexadezimalen Wert.
Siehe das folgende Beispiel.
integer: 123
octal: 0123
hexa: 0x123
Wir können die umgewandelten Dezimalwerte von Oktal- und Hexadezimalwerten sehen, indem wir unser Python-Skript ausführen. Sie sollten die genaue Ausgabe wie folgt sehen.
Key: Value
integer: 123
octal: 83
hexa: 291
Eine weitere spannende Eigenschaft von YAML ist die Möglichkeit, die NAN(Not A Number) und Unendlichkeit.
not_a_number: .NAN
infinity: .inf
negative_infinity: -.inf
Wenn Sie das Python-Skript ausführen, sehen Sie die umgewandelten Werte von NAN, und inf zu Python.
Key: Value
not_a_number: nan
infinity: inf
negative_infinity: -inf
Das war's mit den numerischen Typen in YAML.
Streicher
Strings in YAML können wie folgt dargestellt werden mit oder ohne Anführungszeichen. Beide sind ähnlich. Im Gegensatz zu JSON gibt es keine strikte Regel, jede Zeichenkette in Anführungszeichen zu setzen. Aber, wenn wir die Escape-Sequenzenverwenden, dann müssen wir Anführungszeichen.
Sehen wir uns einige Beispiele für Zeichenketten an.
string: Hi, there I am a string
string with escape character: Hi, I am a newline \n character. And I am not working :(
string with working escape character: "Hi, I am a newline \n character. And I am working :)"
Das Zeilenumbruchzeichen im Abschnitt Schlüssel-Wert-Paar funktioniert wie erwartet. Wie bereits erwähnt, müssen wir doppelte Anführungszeichen verwenden, um mit Escape-Sequenzen zu arbeiten.
Wir haben doppelte Anführungszeichen im nächsten Schlüssel-Wert-Paar verwendet und es funktioniert wie erwartet. Interpretieren Sie den obigen YAML-Code mit unserem Python-Skript. Sie erhalten dann das folgende Ergebnis.
Key: Value
string: Hi, there I am a string
string with escape character: Hi, I am a newline \n character. And I am not working :(
string with working escape character: Hi, I am a newline
character. And I am working :)
In YAML gibt es zwei Sonderzeichen, mit denen man mehrere Sätze als Wert zu einem Schlüssel schreiben kann. Nehmen wir an, wir müssen einen langen Satz in mehrere Zeilen aufteilen. In einem solchen Szenario können wir mit einem falten (größer als >) oder Block (Rohr |) Zeichen, um mehrere Zeilen zu schreiben.
Was ist der Unterschied zwischen falten und Block Figuren? Ich komme darauf zu sprechen.
Falten Zeichen werden die Zeilenumbrüche nicht interpretiert, während Block Charakter tut.
Schauen wir uns die Beispiele an.
multiple lines string with fold character: >
This is a
multiple line
string with fold
character. Remember to use
indentation. Newlines won't be
interpreted.
multiple lines string with block character: |
This is a
multiple line
string with fold
character. Remember to use
indentation. Newlines will be
interpreted.
Führen Sie das Python-Skript aus, dann sehen Sie den Unterschied zwischen dem falten und Block Zeichen. Und vergessen Sie nicht, Einrückungen zu verwenden.
Key: Value
multiple lines string with fold character: This is a multiple line string with fold character. Remember to use indentation. Newlines won't be interpreted.
multiple lines string with block character: This is a
multiple line
string with fold
character. Remember to use
indentation. Newlines will be
interpreted.
Boolesche Werte
In YAML können wir den booleschen Wert darstellen Wahr und Falsch auf drei verschiedene Arten. Schau sie dir an.
- Die Werte Richtig, ein, und Ja werden betrachtet als Wahr in YAML.
- Die Werte FalschAus, und Nein werden betrachtet als Falsch in YAML.
random_key_1: True
random_key_2: On
random_key_3: Yes
random_key_4: False
random_key_5: Off
random_key_6: No
Wenn Sie den obigen YAML-Code interpretieren, dann erhalten Sie die ersten 3 Schlüsselwerte als Wahr und die nächsten 3 Schlüsselwerte als Falsch.
Key: Value
random_key_1: True
random_key_2: True
random_key_3: True
random_key_4: False
random_key_5: False
random_key_6: False
Null
YAML unterstützt ähnlich wie JSON den Null-Wert. Wir können mit dem Schlüsselwort null oder das Symbol Tilde(~) um den Nullwert in YAML zu definieren. YAML hat doch schöne Alternativen, oder? Ja, die sind ganz schön cool.
null_case_1: null
null_case_2: ~
Führen Sie das Python-Skript aus. Sie erhalten beide Werte als Keine wie Python verwendet Keine anstelle der null Stichwort.
Key: Value
null_case_1: None
null_case_2: None
Arrays
Wir können die Arrays ähnlich wie in Python in YAML angeben. Oder wir können alle Array-Elemente in separate Zeilen schreiben, die vor Bindestrich (-). Sehen wir uns ein Beispiel für jede Darstellung an.
programming_languages: [Python, JavaScript, C, HTML, CSS]
libraries: [React, TailwindCSS]
In dem obigen YAML-Code haben wir Platz Klammern ähnlich wie bei Python-Listen. Sehen wir uns eine weitere Möglichkeit an, Arrays in YAML darzustellen (sieht aus wie Markdown-Listen).
programming_languages:
- Python
- JavaScript
- C
- HTML
- CSS
libraries:
- React
- TailwindCSS
Wenn Sie unser Python-Skript verwenden, um die obigen Beispiele zu interpretieren. Sie erhalten dann die folgende Ausgabe.
programming_languages: [Python, JavaScript, C, HTML, CSS]
libraries: [React, TailwindCSS]
Wir können Wörterbücher in der Liste haben, nicht nur Zeichenketten, Zahlen, usw.,
programming_languages: - Python: author: Guido van Rossum - JavaScript: author: Brendan Eich - C: author: Dennis Ritchie libraries: - React: popularity: High - TailwindCSS: popularity: High
Sie erhalten ein Array von Dictionaries, wenn Sie den obigen YAML-Code mit unserem Python-Skript interpretieren.
Key: Value
programming_languages: [{'Python': {'author': 'Guido van Rossum'}}, {'JavaScript': {'author': 'Brendan Eich'}}, {'C': {'author': 'Dennis Ritchie'}}]
libraries: [{'React': {'popularity': 'High'}}, {'TailwindCSS': {'popularity': 'High'}}]
Wörterbücher
Wir haben die Syntax von Wörterbüchern bereits in den obigen Beispielen gesehen. Um es kurz zusammenzufassen: Dictionaries sind Schlüssel-Wert-Paare. Als Wert für den Schlüssel kann jeder gültige Datentyp verwendet werden. YAML unterstützt sogar die Verschachtelung von Dictionaries.
Sehen wir uns ein Beispiel an.
dictionary:
i am key: i am value
nested dictionary:
nested key:
i am nested key: i am nested value
Wenn Sie den obigen Code interpretieren, erhalten Sie das gleiche Ergebnis wie folgt.
Key: Value
dictionary: {'i am key': 'i am value'}
nested dictionary: {'nested key': {'i am nested key': 'i am nested value'}}
Wussten Sie, dass Sie eine Liste in ein Wörterbuch in Python umwandeln?
Satz
YAML unterstützt einen weiteren Datentyp namens Set. Set enthält eindeutige Werte, ähnlich wie der Datentyp set von Python. Set-Elemente werden mit dem vorangestellten Fragezeichen (?) wie Listeneinträge mit vorangestelltem Bindestriche (-).
Wir müssen erwähnen, dass der Datentyp mit !!.setzen nach dem Namen des Sets.
Sehen Sie sich das folgende Beispiel an.
i am a set: !!set
? 1
? 2
? 2
? 3
Da die Menge nur eindeutige Werte enthält, erhalten Sie keine 2 zwei Mal, wenn Sie den obigen YAML-Code mit unserem Python-Skript interpretieren.
Schauen wir uns das Ergebnis an.
Key: Value
set: {1, 2, 3}
Wir können die Menge auch ähnlich der Python-Syntax wie folgt darstellen.
i am a set: !!set
{1, 2, 2, 3}
Sie erhalten dann die gleiche Ausgabe wie im obigen Beispiel.
Das war's mit den Datentypen in YAML. Schauen wir uns nun einige zusätzliche Funktionen in YAML an.
Kommentare
YAML unterstützt Kommentare. Das ist großartig. Wir können in YAML Kommentare schreiben, die mit einem Raute (#) Symbol.
# I am a comment
yaml is great: # I am a comment too
Wenn Sie den obigen YAML-Code interpretieren, dann erhalten Sie einen leeren Schlüssel mit einem Nullwert.
Key: Value
yaml is great: None
YAML unterstützt keine mehrzeiligen Kommentare. Für mehrzeilige Kommentare müssen wir, ähnlich wie in Python, mehrere Zeilen schreiben, die mit einer Raute beginnen.
Verankerungen
Verankerungen ermöglichen es uns, den Inhalt einer Taste an eine beliebige Stelle im gesamten Dokument zu kopieren. Dies ist sehr praktisch, wenn Sie einige Inhalte im Dokument duplizieren möchten.
Um Anker zu verwenden, müssen wir einen Namen für sie definieren, wie einen Variablennamen in Programmiersprachen. Dann können wir sie überall im Dokument verwenden, wo wir wollen.
Wir können den Ankernamen mit & und verwenden Sie es mit *. Sehen wir uns ein Beispiel an.
# duplicate_data is the name of the anchor
data: &duplicate_data This content is to duplicate
# dopying the data
duplicate_data: *duplicate_data
In dem obigen Beispiel haben wir eine duplizieren_data Anker, um den Wert des Daten Schlüssel. Beide Schlüssel enthalten die gleichen Werte, wenn Sie die obige YAML interpretieren.
Key: Value
data: This content is to duplicate
duplicate_data: This content is to duplicate
Schlussfolgerung
Ich hoffe, Sie haben ein gutes Verständnis von YAML bekommen. Nun können Sie YAML in Ihrer nächsten Projektkonfigurationsdatei verwenden. Sie können sich auf die YAML offizielle Website, um weitere Informationen zu erhalten.
Fröhliches Kodieren 🙂