Python's Pickles

Pickles in Python sind lecker in dem Sinne, dass sie ein Python-Objekt als Bytefolge darstellen. Mit diesen Bytes können viele Dinge tatsächlich gemacht werden. Sie können sie beispielsweise in einer Datei oder Datenbank speichern oder über ein Netzwerk übertragen. 

Die eingelesene Darstellung eines Python-Objekts heißt a Pickle-Datei. Die eingelegte Datei kann daher für verschiedene Zwecke verwendet werden, z. B. zum Speichern von Ergebnissen, die von einem anderen Python-Programm verwendet werden sollen, oder zum Erstellen von Sicherungen. Das ursprüngliche Python-Objekt erhalten Sie einfach unbestechlich diese Zeichenfolge von Bytes.

Um in Python zu gurken, verwenden wir die Essiggurke Modul. Wie in der Dokumentation angegeben:

Das Pickle-Modul implementiert binäre Protokolle zum Serialisieren und De-Serialisieren einer Python-Objektstruktur. "Beizen" ist der Prozess, bei dem eine Python-Objekthierarchie in einen Bytestrom konvertiert wird, und "Entpickeln" ist die inverse Operation, bei der ein Bytestrom (aus einer Binärdatei oder einem bytesähnlichen Objekt) in eine Objekthierarchie zurück konvertiert wird. Beizen (und Entpickeln) wird alternativ als "Serialisierung", "Rangieren" oder "Abflachen" bezeichnet. Um jedoch Verwirrung zu vermeiden, werden hier die Bezeichnungen "Beizen" und "Abnehmen" verwendet..

Das Essiggurke Mit diesem Modul können wir fast jedes Python-Objekt speichern direkt in eine Datei oder einen String, ohne Konvertierungen durchführen zu müssen. Was zum Essiggurke Modul führt tatsächlich aus, was so genannt wird Objektserialisierung, das heißt, Objekte in und aus Byte-Zeichenketten konvertieren. Das zu kommissionierende Objekt wird in einen Bytestrom serialisiert, der beispielsweise in eine Datei geschrieben und später wiederhergestellt werden kann.

Installieren Essiggurke

Das Essiggurke Das Modul ist bereits in der Python-Installation enthalten. Um eine Liste der installierten Module abzurufen, können Sie den folgenden Befehl in die Python-Eingabeaufforderung eingeben: Hilfe ("Module").

Also alles was Sie tun müssen, um mit dem zu arbeiten Essiggurke Modul ist zu Pickle importieren!

Erstellen einer Pickle-Datei

In diesem Abschnitt betrachten wir einige Beispiele für das Beizen, um das Konzept besser zu verstehen. Beginnen wir mit dem Erstellen einer Pickle-Datei aus einem Objekt. Unser Ziel hier ist das machen Liste, die wir im Python-Listen-Tutorial erstellt haben.

todo = ['blog post schreiben', 'auf E-Mail antworten', 'in einem Buch lesen']

Um unser Listenobjekt (machen) können wir Folgendes tun:

import pickle todo = ['blog post schreiben', 'auf E-Mail antworten', 'in einem Buch lesen'] pickle_file = Datei ('todo.pickle', 'w') pickle.dump (todo, pickle_file)

Beachten Sie, dass wir eine gemacht haben Pickle importieren in der Lage sein, die Essiggurke Modul. Wir haben auch eine Pickle-Datei erstellt, in der das Pickel-Objekt gespeichert wird, nämlich todo.pickle. Das Dump Funktion schreibt eine eingelegte Darstellung von machen auf das geöffnete Dateiobjekt pickle_file. Mit anderen Worten, die Dump Funktion hat hier zwei Argumente: das zu pickle Objekt, welches das ist machen liste und ein Dateiobjekt, in das die Pickle geschrieben werden soll todo.pickle.

Entpacken (Wiederherstellen) der eingelegten Daten

Angenommen, wir möchten die gepickelten Daten entpacken (wiederherstellen). In unserem Fall ist dies das machen Liste. Dazu können wir folgendes Skript schreiben:

import pickle pickle_file = datei ('todo.pickle') todo = pickle.load (pickle_file) print (todo)

Das obige Skript gibt die Ausgabe aus machen Listenelemente:

['blog post schreiben', 'auf e-mail antworten', 'in einem buch lesen']]

Wie in der Dokumentation erwähnt, ist das lade Datei) Funktion führt Folgendes aus:

Liest eine Zeichenfolge aus der geöffneten Dateiobjektdatei und interpretiert sie als Pickle-Datenstrom, wobei die ursprüngliche Objekthierarchie rekonstruiert und zurückgegeben wird. Das ist äquivalent zu Unpickler (Datei) .load ().

Pickles als Schnüre

Im obigen Abschnitt haben wir gesehen, wie wir Pickles in eine Datei schreiben / laden können. Dies ist jedoch nicht notwendig. Ich meine, wenn wir Pickles schreiben / laden wollen, müssen wir nicht immer mit Dateien umgehen - wir können stattdessen mit Pickles als Strings arbeiten. Wir können also folgendes tun:

import pickle todo = ['blog post schreiben', 'auf E-Mail antworten', 'in einem Buch lesen'] pickled_data = pickle.dumps (todo) print (pickled_data)

Beachten Sie, dass wir die verwendet haben Dumps (mit einem "s" am Ende) Funktion, die laut Dokumentation:

Gibt die kommissionierte Darstellung des Objekts als Zeichenfolge zurück, anstatt es in eine Datei zu schreiben.

Um die oben genannten Daten wiederherzustellen, können wir die Lasten (String) Funktion wie folgt:

restore_data = pickle.loads (pickled_data)

Nach der Dokumentation, was die Ladungen Funktion tut, dass es:

Liest eine ausgewählte Objekthierarchie aus einer Zeichenfolge. Zeichen in der Zeichenfolge nach der Darstellung des ausgewählten Objekts werden ignoriert.

Mehr als ein Objekt einlegen

In den obigen Beispielen haben wir uns mit dem Beizen und Wiederherstellen (Laden) von jeweils nur einem Objekt befasst. In diesem Abschnitt werde ich Ihnen zeigen, wie wir das für mehr als ein Objekt tun können. Sagen wir, dass wir die folgenden Objekte haben:

name = 'Abder' website = 'http://abder.io' english_french = 'paper': 'papier', 'pen': 'stylo', 'car': 'voiture' # dictionary tup = (31, 'abder', 4.0) # Tupel

Wenn Sie mehr über Python-Wörterbücher und -Tupel erfahren möchten, lesen Sie die folgenden Lernprogramme:

  • Ein glatter Refresher für Pythons Wörterbücher
  • Ein glatter Refresher auf Pythons Tuples

Wir können die oben genannten Objekte einfach durch Ausführen von a auswählen Serie von Dump Funktionen wie folgt:

import pickle name = 'Abder' website = 'http://abder.io' english_french = 'paper': 'papier', 'pen': 'stylo', 'car': 'voiture' # dictionary tup = ( 31, 'abder', 4.0) # Tupel pickled_file = open ('pickled_file.pickle', 'w') pickle.dump (name, pickled_file) pickle.dump (website, pickled_file) pickle.dump (engl_french, pickled_file) pickle. dump (tup, pickled_file)

Dadurch werden alle vier Objekte in der Pickle-Datei ausgewählt pickled_file.pickle.

Es gibt noch eine weitere wunderbare Möglichkeit, das obige Skript mithilfe von zu schreiben Pickler Klasse in der Essiggurke Modul wie folgt:

from pickle import Pickler name = 'Abder' website = 'http://abder.io' english_french = 'paper': 'papier', 'pen': 'stylo', 'car': 'voiture' # dictionary tup = (31, 'abder', 4.0) # tuple pickled_file = open ('pickled_file.pickle', 'w') p = Pickler (pickled_file) p.dump (name); p.dump (Website); p.dump (english_french); p.dump (tup)

Um die Originaldaten wiederherzustellen (zu laden), können wir einfach mehrere Daten verwenden Belastung Funktion wie folgt:

import pickle pickled_file = open ('pickled_file.pickle') name = pickle.load (pickled_file) website = pickle.load (pickled_file) english_french = pickle.load (pickled_file) tup = pickle.load (pickled_file) print ('Name:' ) drucken (Name) drucken ('Website:') drucken (Website) drucken ('Englsh to French:') drucken (english_french) drucken ('Tuple data:') drucken (tup)

Die Ausgabe des obigen Skripts lautet:

Name: Abder Website: http://abder.io Englsh in Französisch: 'Auto': 'Voiture', 'Stift': 'Stylo', 'Papier': 'Papier' Tupel-Daten: (31, 'Abder') 4,0)

Wie bei der Pickler Klasse können wir das obige Skript mit der Unpickler Klasse in der Essiggurke Modul wie folgt:

aus pickle importieren Unpickler pickled_file = open ('pickled_file.pickle') u = Unpickler (pickled_file) name = u.load (); website = u.load (); english_french = u.load (); tup = u.load () print ('Name:') print (Name) print ('Website:') print (Website) print ('englisch nach französisch:') print (english_french) print ('Tuple data:') drucken (tup)

Beachten Sie, dass die Variablen in derselben Reihenfolge geschrieben und gelesen werden müssen, um die gewünschte Ausgabe zu erhalten. Um hier Probleme zu vermeiden, können wir die Daten wie folgt mit einem Wörterbuch verwalten:

import pickle name = 'Abder' website = 'http://abder.io' english_french = 'paper': 'papier', 'pen': 'stylo', 'car': 'voiture' # dictionary tup = ( 31, 'abder', 4.0) # tuple pickled_file = open ('pickled_file.pickle', 'w') data = 'name': name, 'website': website, 'english_french_dictionary': english_french, 'tuple': tup  pickle.dump (data, pickled_file)

Zum Wiederherstellen (Laden) der im obigen Skript ausgewählten Daten können wir Folgendes tun:

import pickle pickled_file = open ('pickled_file.pickle') data = pickle.load (pickled_file) name = data ['name'] website = data ['website'] english_french = data ['english_french_dictionary'] tup = data ['tuple '] drucken (' Name: ') drucken (Name) drucken (' Website: ') drucken (Website) drucken (' englisch nach französisch: ') drucken (english_french) drucken (' Tuple data: ') drucken (tup)

Essiggurken und Pandas

Nun, das scheint eine interessante Kombination zu sein. Wenn Sie sich fragen, was Pandas sind, können Sie im Tutorial Einführung in Pandas mehr darüber erfahren. Die grundlegende Datenstruktur von Pandas wird genannt DataFrame, eine tabellarische Datenstruktur, die aus geordneten Spalten und Zeilen besteht.

Nehmen wir ein Beispiel für DataFrame aus dem Pandas-Tutorial:

importieren Sie Pandas als pd name_age = 'Name': ['Ali', 'Bill', 'David', 'Hany', 'Ibtisam'], 'Age': [32, 55, 20, 43, 30] data_frame = pd.DataFrame (name_age)

Um unsere zu beizen DataFrame, wir können die verwenden to_pickle () Funktion wie folgt:

data_frame.to_pickle ('my_panda.pickle')

Um das Pickled wiederherzustellen (zu laden) DataFrame, wir können die verwenden read_pickle () Funktion wie folgt:

restore_data_frame = pd.read_pickle ('my_panda.pickle')

Wenn wir das, was wir in diesem Abschnitt erwähnt haben, zusammenfassen, sieht das Skript, das ein Pandasobjekt anpickt und lädt, so aus:

importieren Sie Pandas als pd name_age = 'Name': ['Ali', 'Bill', 'David', 'Hany', 'Ibtisam'], 'Age': [32, 55, 20, 43, 30] data_frame = pd.DataFrame (name_age) data_frame.to_pickle ('my_panda.pickle') restore_data_frame = pd.read_pickle ('my_panda.pickle') drucken (restore_data_frame)

Fazit

In diesem Tutorial habe ich ein interessantes Modul namens "Covers" behandelt Essiggurke. Wir haben gesehen, wie einfach dieses Modul es uns ermöglicht, Python-Objekte für verschiedene Zwecke zu speichern, z. B. für die Verwendung des Objekts mit einem anderen Python-Programm, das Übertragen des Objekts über ein Netzwerk, das Speichern des Objekts für die spätere Verwendung usw. Wir können das Python-Objekt einfach auswählen und entpacken (laden), wenn das ursprüngliche Objekt wiederhergestellt werden soll.

Zögern Sie nicht zu sehen, was wir für den Verkauf und zum Lernen auf dem Markt zur Verfügung haben, und zögern Sie nicht, Fragen zu stellen und mit dem untenstehenden Feed wertvolles Feedback zu geben.