8.1 Was ist Serialisierung
Nachdem du gelernt hast, wie man mit Dateien arbeitet, Daten speichert und liest, ist es an der Zeit, ernsthaft mit Dateien zu arbeiten. Heute beginnen wir mit der Serialisierung.
Serialisierung ist der Prozess der Umwandlung eines Objekts in eine Bytefolge oder ein Format, das in einer Datei gespeichert, über das Netzwerk übertragen oder in einer Datenbank gespeichert werden kann. Deserialisierung ist der umgekehrte Prozess, bei dem aus dieser Bytefolge das ursprüngliche Objekt wiederhergestellt wird.
Um ein Objekt in einer Datei zu speichern (oder es über das Netzwerk zu übertragen), muss es in eine Art String (oder eine Menge von Bytes) umgewandelt werden, die leicht in einer Datei gespeichert (und aus der Datei gelesen) oder über das Netzwerk übertragen werden kann.
Hier sind die 4 Hauptanwendungsbereiche der Serialisierung:
- Speichern des Objektzustands: Um den Zustand eines Objekts zwischen Programmstarts zu speichern.
- Datenübertragung: Um Objekte über das Netzwerk zwischen verschiedenen Systemkomponenten oder zwischen verschiedenen Systemen zu übertragen.
- Caching: Um Objekte im Cache für schnellen Zugriff zu speichern.
- Datenbanken: Um komplexe Datenstrukturen in Datenbanken zu speichern.
Es gibt viele Bibliotheken, die sich mit Serialisierung beschäftigen, und jede ist für ihre eigenen Bedürfnisse entwickelt worden. Wir werden uns mit fünf von ihnen vertraut machen, von denen wir zwei sehr ausführlich behandeln werden.
Betrachten wir die beliebtesten unter ihnen:
- Modul
pickle
- Modul
json
- Modul
yaml
- Modul
marshal
- Modul
shelve
Nachfolgend ein kurzer Überblick über jedes von ihnen:
8.2 Modul pickle
pickle
ist ein eingebautes Modul zur Serialisierung und Deserialisierung von Python-Objekten. Es ermöglicht das Speichern und Wiederherstellen fast aller Python-Objekte, einschließlich benutzerdefinierter Klassen.
Beispiel für die Verwendung von pickle
:
import pickle
# Beispielobjekt zur Serialisierung
data = {'name': 'Alice', 'age': 30, 'is_student': False}
# Serialisierung des Objekts in eine Datei
with open('data.pkl', 'wb') as file:
pickle.dump(data, file)
# Deserialisierung des Objekts aus der Datei
with open('data.pkl', 'rb') as file:
loaded_data = pickle.load(file)
print(loaded_data)
8.3 Modul json
json
ist ein eingebautes Modul für die Arbeit mit JSON (JavaScript Object Notation). JSON ist ein textbasiertes Format, das für den Datenaustausch zwischen Client und Server verwendet wird.
Beispiel für die Verwendung von json
:
import json
# Beispielobjekt zur Serialisierung
data = {'name': 'Bob', 'age': 25, 'is_student': True}
# Serialisierung des Objekts in einen JSON-String
json_string = json.dumps(data)
print(json_string)
# Serialisierung des Objekts in eine JSON-Datei
with open('data.json', 'w') as file:
json.dump(data, file)
# Deserialisierung des Objekts aus einem JSON-String
loaded_data = json.loads(json_string)
print(loaded_data)
# Deserialisierung des Objekts aus einer JSON-Datei
with open('data.json', 'r') as file:
loaded_data = json.load(file)
print(loaded_data)
8.4 Modul yaml
yaml
(YAML Ain't Markup Language) ist ein menschenlesbares Format zur Datenserialisierung. Zur Arbeit mit YAML in Python wird die Drittanbieter-Bibliothek PyYAML verwendet.
Beispiel für die Verwendung von yaml
:
import yaml
# Beispielobjekt zur Serialisierung
data = {'name': 'Carol', 'age': 27, 'is_student': False}
# Serialisierung des Objekts in einen YAML-String
yaml_string = yaml.dump(data)
print(yaml_string)
# Serialisierung des Objekts in eine YAML-Datei
with open('data.yaml', 'w') as file:
yaml.dump(data, file)
# Deserialisierung des Objekts aus einem YAML-String
loaded_data = yaml.load(yaml_string, Loader=yaml.FullLoader)
print(loaded_data)
# Deserialisierung des Objekts aus einer YAML-Datei
with open('data.yaml', 'r') as file:
loaded_data = yaml.load(file, Loader=yaml.FullLoader)
print(loaded_data)
8.5 Modul marshal
marshal
ist ein eingebautes Modul zur Serialisierung von Python-Objekten, das zur Serialisierung von Python-Code verwendet wird. Es ist schneller als pickle
, unterstützt jedoch weniger Objekttypen und ist weniger flexibel.
Beispiel für die Verwendung von marshal
:
import marshal
# Beispielobjekt zur Serialisierung
data = {'name': 'Dave', 'age': 35, 'is_student': True}
# Serialisierung des Objekts in eine Datei
with open('data.marshal', 'wb') as file:
marshal.dump(data, file)
# Deserialisierung des Objekts aus der Datei
with open('data.marshal', 'rb') as file:
loaded_data = marshal.load(file)
print(loaded_data)
8.6 Modul shelve
shelve
ist ein eingebautes Modul, das eine einfache Möglichkeit bietet, Python-Objekte in Dateien zu speichern, indem es ein schlüsselbasiertes Speicherformat verwendet, das einem Wörterbuch ähnelt.
Beispiel für die Verwendung von shelve
:
import shelve
# Beispielobjekt zur Serialisierung
data = {'name': 'Eve', 'age': 28, 'is_student': False}
# Serialisierung des Objekts in eine Datei
with shelve.open('data.shelve') as db:
db['person'] = data
# Deserialisierung des Objekts aus der Datei
with shelve.open('data.shelve') as db:
loaded_data = db['person']
print(loaded_data)
Und obwohl sich die Module und das Speicherformat der Daten unterscheiden, ist die Arbeit mit ihnen aus der Sicht eines Programmierers sehr ähnlich. Unten werden wir uns genauer mit der Arbeit mit dem Modul pickle
und dem Modul json
befassen.
GO TO FULL VERSION