In diesem Tutorial lernen Sie, wie Sie mit den Python-Modulen shelve und pickle Datenstrukturen speichern, verwalten und wiederherstellen, um eine effiziente und sichere Datenpersistenz in Ihren Projekten zu erreichen.
Hier ist ein umfassendes Tutorial zu den Python-Modulen shelve
und pickle
, die häufig zur Speicherung und Serialisierung von Daten verwendet werden. Das Tutorial enthält eine Einführung in beide Module, Anwendungsbeispiele und Best Practices.
shelve
und wie funktioniert es?shelve
: Erstellung, Lesen und Schreiben von Datenshelve
pickle
zur Serialisierung von Python-Objektenpickle
und shelve
pickle
shelve
und wie funktioniert es?Das Python-Modul shelve
bietet eine einfache Möglichkeit, Datenstrukturen wie Dictionaries, Listen oder benutzerdefinierte Objekte in Dateien zu speichern, die später wieder geladen werden können. shelve
kombiniert die Speicherung von Python-Objekten mit einem Dictionary-artigen Zugriff, sodass Daten wie in einem Dictionary gelesen und geschrieben werden können.
Shelve
erstellt eine Datei, die als eine Art Mini-Datenbank fungiert, in der Python-Objekte persistiert gespeichert werden. Es ist besonders nützlich für kleinere Datenspeicher, bei denen eine vollständige Datenbanklösung übertrieben wäre.
shelve
: Erstellung, Lesen und Schreiben von DatenUm eine shelve
-Datei zu erstellen und Daten zu speichern, öffnen Sie ein shelve
-Objekt im Schreibmodus ('c'
für erstellen/aktualisieren). Sie können dann Daten in Form von Schlüssel-Wert-Paaren speichern, ähnlich wie bei einem Python-Dictionary. Die Schlüssel müssen vom Typ String sein.
import shelve
# Öffnen oder erstellen der Datenbankdatei
with shelve.open('mein_shelve') as db:
# Speichern von Daten
db['name'] = 'Max Mustermann'
db['alter'] = 30
db['hobbys'] = ['Lesen', 'Programmieren', 'Radfahren']
print("Daten wurden gespeichert.")
Der obige Code erstellt eine mein_shelve
-Datei, falls diese noch nicht existiert, und speichert darin verschiedene Datenstrukturen.
Nach dem Speichern können die Daten durch Öffnen der Datei und Zugriff auf die Schlüssel wieder abgerufen werden:
import shelve
# Öffnen der shelve-Datei im Lesemodus
with shelve.open('mein_shelve') as db:
# Abrufen der Daten
name = db['name']
alter = db['alter']
hobbys = db['hobbys']
print(f"Name: {name}")
print(f"Alter: {alter}")
print(f"Hobbys: {hobbys}")
Sie können vorhandene Daten aktualisieren oder neue Einträge hinzufügen, indem Sie das shelve
-Objekt erneut öffnen und die entsprechenden Schlüssel-Werte zuweisen.
import shelve
with shelve.open('mein_shelve') as db:
# Aktualisieren eines bestehenden Eintrags
db['alter'] = 31
# Hinzufügen eines neuen Eintrags
db['stadt'] = 'Berlin'
print("Daten wurden aktualisiert.")
Um Daten zu entfernen, verwenden Sie das del
-Statement auf dem Schlüssel:
import shelve
with shelve.open('mein_shelve') as db:
# Löschen eines Eintrags
del db['stadt']
print("Eintrag wurde gelöscht.")
shelve
Verwenden Sie den Kontext-Manager (with
): Dadurch wird sichergestellt, dass die Datei korrekt geschlossen wird.
Daten vor dem Speichern vorbereiten: Shelve speichert nur Objekte, die pickle
-kompatibel sind (Listen, Dictionaries, Klassenobjekte, etc.). Vermeiden Sie unpickelbare Objekte wie offene Dateihandles.
Vermeiden Sie die gleichzeitige Verwendung mehrerer Instanzen: Das shelve
-Modul ist nicht für parallelen Zugriff geeignet. Um Datenkorruption zu vermeiden, sollte jeweils nur eine Instanz die Datei öffnen.
pickle
zur Serialisierung von Python-ObjektenDas pickle
-Modul in Python ist ein leistungsstarkes Tool, um beliebige Python-Objekte in Byte-Streams zu serialisieren und in Dateien zu speichern oder über Netzwerke zu übertragen. Anders als shelve
, das eine Struktur auf Basis eines Dictionaries bereitstellt, bietet pickle
eine detaillierte und flexible Möglichkeit zur Serialisierung komplexer Objekte.
pickle
Mit pickle
können wir Daten in einer Datei speichern, indem wir das dump
-Verfahren verwenden.
import pickle
# Daten zum Speichern
daten = {'name': 'Max Mustermann', 'alter': 30, 'hobbys': ['Lesen', 'Programmieren', 'Radfahren']}
# Serialisieren und in einer Datei speichern
with open('daten.pickle', 'wb') as file:
pickle.dump(daten, file)
print("Daten wurden serialisiert und gespeichert.")
pickle
Gespeicherte Daten lassen sich mit load
wieder in Python laden und rekonstruieren.
import pickle
# Deserialisieren und aus der Datei laden
with open('daten.pickle', 'rb') as file:
daten = pickle.load(file)
print(f"Name: {daten['name']}")
print(f"Alter: {daten['alter']}")
print(f"Hobbys: {daten['hobbys']}")
pickle
und shelve
shelve
erstellt eine Struktur, die ähnlich wie ein Dictionary funktioniert und eignet sich, wenn ein einfacher, schlüsselbasierter Zugriff auf die Daten erforderlich ist.pickle
ist flexibler, da es auch komplexe Objekte (z.B. Klasseninstanzen) speichern kann, jedoch keine direkte Schlüssel-Zugriffsmöglichkeit bietet.shelve
ist ideal für Datenbanken mit einfachem Lese-/Schreibzugriff, während pickle
für die Speicherung und Wiederherstellung komplexer Datenstrukturen verwendet wird.pickle
und shelve
Es ist auch möglich, pickle
zusammen mit shelve
zu verwenden, um komplexe Datenstrukturen zu speichern:
import shelve
import pickle
# Erstellen eines komplexen Objekts
class Benutzer:
def __init__(self, name, alter):
self.name = name
self.alter = alter
self.hobbys = ['Lesen', 'Programmieren', 'Radfahren']
benutzer = Benutzer('Max Mustermann', 30)
# Speichern mit shelve und pickle
with shelve.open('benutzer_shelve') as db:
db['benutzer'] = pickle.dumps(benutzer)
# Laden mit shelve und pickle
with shelve.open('benutzer_shelve') as db:
benutzer = pickle.loads(db['benutzer'])
print(f"Name: {benutzer.name}")
print(f"Alter: {benutzer.alter}")
print(f"Hobbys: {benutzer.hobbys}")
In diesem Beispiel verwenden wir pickle
innerhalb von shelve
, um ein komplexes Python-Objekt zu speichern und wiederherzustellen.
pickle
Beim Arbeiten mit pickle
sollten Sie einige Sicherheitsvorkehrungen treffen:
Untrusted Data nicht laden: pickle
kann gefährlich sein, wenn die Daten von unbekannten Quellen stammen, da der Deserialisierungsprozess bösartigen Code enthalten könnte. Laden Sie daher nur Daten, die aus vertrauenswürdigen Quellen stammen.
Verwenden Sie alternative Serialisierungsformate für untrusted data: Wenn Daten aus unbekannten oder unsicheren Quellen stammen, sollten Sie stattdessen Formate wie JSON verwenden, die keine ausführbaren Objekte laden können.
Beispiel für sichere pickle
-Nutzung:
import pickle
# Vertrauenswürdige Daten serialisieren
sichere_daten = {'sicher': 'Ja', 'vertrauenswürdig': True}
with open('sichere_daten.pickle', 'wb') as file:
pickle.dump(sichere_daten, file)
# Vertrauenswürdige Daten deserialisieren
with open('sichere_daten.pickle', 'rb') as file:
daten = pickle.load(file)
print(daten)
Finden Sie interessante und zum Thema passende Kurse
Beginnen Sie Ihre Programmierkarriere mit unserem Python-Einführungskurs. Erlernen Sie grundlegende Konzepte wie Variablen, Schleifen und Datenstrukturen und bauen Sie eine solide Basis in Python auf. Durch praxisnahe Projekte und kompetente Anleitung entwickeln Sie wertvolle Programmierfähigkeiten.
5 Tage Vollzeit auch als Feierabendkurs Online
Nächster Termin: 20. Januar 2025
Preis pro Person: 1600,00 EUR
Rabattaktion: 3 für den Preis von 2!
Diese Schulung „Python für Fortgeschrittene“ vertieft fortgeschrittene Programmiertechniken in Python, wie objektorientierte Programmierung, funktionale Programmierung und Persistenz. Die Teilnehmer lernen, wie sie komplexe Designs und Muster in Python umsetzen, effiziente Datenverarbeitung durchführen und wissenschaftliche Python-Bibliotheken nutzen können. Die Schulung bietet zudem praxisnahe Einblicke in Datenbanken, Metaklassen, Caching und maschinelles Lernen mit scikit-learn.
5 Tage Vollzeit Online
Nächster Termin: 13. Januar 2025
Preis pro Person: 1900,00 EUR
Rabattaktion: 3 für den Preis von 2!