In Python müssen wir manchmal das Objekt zur späteren Verwendung auf der Festplatte speichern. Dies kann mit Python Pickle erfolgen. In diesem Artikel lernen wir anhand einiger Beispiele etwas über Pickles in Python.
Python Pickle – Python-Objektserialisierung
Python Pickle-Modul wird zum Serialisieren und Deserialisieren einer Python-Objektstruktur verwendet. Jedes Objekt in Python kann ausgewählt werden, sodass es auf der Festplatte gespeichert werden kann. Pickle serialisiert das Objekt zunächst, bevor es in eine Datei geschrieben wird. Pickling ist eine Möglichkeit, ein Python-Objekt (Liste, Wörterbuch usw.) in einen Zeichenstrom umzuwandeln. Die Idee ist, dass dieser Zeichenstrom alle notwendigen Informationen enthält, um das Objekt in einem anderen zu rekonstruieren Python Skript. Es bietet die Möglichkeit, jedes Python-Objekt in einen Byte-Stream zu konvertieren. Dieser Byte-Stream enthält alle wesentlichen Informationen über das Objekt, sodass es in jedem Python rekonstruiert oder entpickt und wieder in seine ursprüngliche Form gebracht werden kann.

Funktionsweise einer Serialisierung
Python Pickle-Beispiel
Beizen ohne Feile
In diesem Beispiel werden wir die Wörterbuchdaten serialisieren und in einem Bytestream speichern. Anschließend werden diese Daten mit deserialisiert pickle.loads() Funktion zurück in das ursprüngliche Python-Objekt.
Python3
import> pickle> # initializing data to be stored in db> Omkar>=> {>'key'> :>'Omkar'>,>'name'> :>'Omkar Pathak'>,> 'age'> :>21>,>'pay'> :>40000>}> Jagdish>=> {>'key'> :>'Jagdish'>,>'name'> :>'Jagdish Pathak'>,> 'age'> :>50>,>'pay'> :>50000>}> # database> db>=> {}> db[>'Omkar'>]>=> Omkar> db[>'Jagdish'>]>=> Jagdish> # For storing> # type(b) gives ;> b>=> pickle.dumps(db)> # For loading> myEntry>=> pickle.loads(b)> print>(myEntry)> |
wichtig
>
>
Ausgabe:
{'Omkar': {'key': 'Omkar', 'name': 'Omkar Pathak', 'age': 21, 'pay': 40000}, 'Jagdish': {'key': 'Jagdish', 'name': 'Jagdish Pathak', 'age': 50, 'pay': 50000}}> Beizen mit einer Feile
In diesem Beispiel verwenden wir eine Pickle-Datei, um zunächst mit der Funktion pickle.dump() die Daten darin zu schreiben. Dann laden wir mit der Funktion pickle.load() die Pickle-Datei in ein Python-Skript und geben ihre Daten in Form eines Python-Wörterbuchs aus.
Python3
Mac-Betriebssysteme
# Python3 program to illustrate store> # efficiently using pickle module> # Module translates an in-memory Python object> # into a serialized byte stream—a string of> # bytes that can be written to any file-like object.> import> pickle> def> storeData():> ># initializing data to be stored in db> >Omkar>=> {>'key'> :>'Omkar'>,>'name'> :>'Omkar Pathak'>,> >'age'> :>21>,>'pay'> :>40000>}> >Jagdish>=> {>'key'> :>'Jagdish'>,>'name'> :>'Jagdish Pathak'>,> >'age'> :>50>,>'pay'> :>50000>}> ># database> >db>=> {}> >db[>'Omkar'>]>=> Omkar> >db[>'Jagdish'>]>=> Jagdish> > ># Its important to use binary mode> >dbfile>=> open>(>'examplePickle'>,>'ab'>)> > ># source, destination> >pickle.dump(db, dbfile)> >dbfile.close()> def> loadData():> ># for reading also binary mode is important> >dbfile>=> open>(>'examplePickle'>,>'rb'>)> >db>=> pickle.load(dbfile)> >for> keys>in> db:> >print>(keys,>'=>'>, db[keys])> >dbfile.close()> if> __name__>=>=> '__main__'>:> >storeData()> >loadData()> |
>
>
Ausgabe:
Omkar =>{'key': 'Omkar', 'name': 'Omkar Pathak', 'age': 21, 'pay': 40000} Jagdish => {'key ': 'Jagdish', 'name': 'Jagdish Pathak', 'age': 50, 'pay': 50000}> Vorteile der Verwendung von Pickle in Python
- Rekursive Objekte (Objekte, die Verweise auf sich selbst enthalten): Pickle verfolgt die bereits serialisierten Objekte, sodass spätere Verweise auf dasselbe Objekt nicht erneut serialisiert werden. (Das Marshal-Modul bricht hierfür ab.)
- Objektfreigabe (Verweise auf dasselbe Objekt an verschiedenen Stellen): Dies ähnelt selbstreferenzierenden Objekten. Pickle speichert das Objekt einmal und stellt sicher, dass alle anderen Referenzen auf die Masterkopie verweisen. Gemeinsam genutzte Objekte bleiben gemeinsam genutzt, was für veränderliche Objekte sehr wichtig sein kann.
- Benutzerdefinierte Klassen und ihre Instanzen: Marshal unterstützt diese überhaupt nicht, aber Pickle kann Klasseninstanzen transparent speichern und wiederherstellen. Die Klassendefinition muss importierbar sein und sich im selben Modul befinden wie zum Zeitpunkt der Speicherung des Objekts.
Nachteile der Verwendung von Pickle in Python
- Abhängigkeit der Python-Version: Die Daten von Picle reagieren sehr empfindlich auf die erstellte Python-Version. Eingelegtes Objekt, das mit einer Version von Python erstellt wurde und bei verschiedenen Versionen möglicherweise nicht wieder entfernt werden kann.
- Nicht lesbar: Das Format von Pickle ist binär und für Menschen nicht leicht lesbar oder bearbeitbar. Die Verträge im JSON- oder XML-Format können problemlos geändert werden.
- Ineffizienz großer Datenmengen: Große Datensätze können das Beizen und Entbeizen verlangsamen. Für solche Anwendungsfälle könnte die Serialisierung besser geeignet sein.
Abschluss
Während Python Pickle Funktionen zur Objektserialisierung bietet, müssen Entwickler Einschränkungen einhalten, insbesondere wenn sie mit verschiedenen Python-Versionen arbeiten oder mit großen Datensätzen arbeiten. Denken Sie daran, immer die spezifischen Anforderungen Ihrer Anwendung zu berücksichtigen, um festzustellen, ob Ickle oder eine Alternative wie JSON oder XML für die Serialisierung geeignet ist.