CodeGym /Kurse /Python SELF DE /Serialisierung

Serialisierung

Python SELF DE
Level 22 , Lektion 0
Verfügbar

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.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION