Rheinwerk Computing < openbook >

 
Inhaltsverzeichnis
1 Einleitung
2 Die Programmiersprache Python
Teil I Einstieg in Python
3 Erste Schritte im interaktiven Modus
4 Der Weg zum ersten Programm
5 Kontrollstrukturen
6 Dateien
7 Das Laufzeitmodell
8 Funktionen, Methoden und Attribute
9 Informationsquellen zu Python
Teil II Datentypen
10 Das Nichts – NoneType
11 Operatoren
12 Numerische Datentypen
13 Sequenzielle Datentypen
14 Zuordnungen
15 Mengen
16 Collections
17 Datum und Zeit
18 Aufzählungstypen – Enum
Teil III Fortgeschrittene Programmiertechniken
19 Funktionen
20 Modularisierung
21 Objektorientierung
22 Ausnahmebehandlung
23 Iteratoren
24 Kontextobjekte
25 Manipulation von Funktionen und Methoden
Teil IV Die Standardbibliothek
26 Mathematik
27 Kryptografie
28 Reguläre Ausdrücke
29 Schnittstelle zu Betriebssystem und Laufzeitumgebung
30 Kommandozeilenparameter
31 Dateisystem
32 Parallele Programmierung
33 Datenspeicherung
34 Netzwerkkommunikation
35 Debugging und Qualitätssicherung
36 Dokumentation
Teil V Weiterführende Themen
37 Anbindung an andere Programmiersprachen
38 Distribution von Python-Projekten
39 Grafische Benutzeroberflächen
40 Python als serverseitige Programmiersprache im WWW – ein Einstieg in Django
41 Wissenschaftliches Rechnen
42 Insiderwissen
43 Von Python 2 nach Python 3
A Anhang
Stichwortverzeichnis

Download:
- Beispielprogramme, ca. 464 KB

Jetzt Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Python 3 von Johannes Ernesti, Peter Kaiser
Das umfassende Handbuch
Buch: Python 3

Python 3
Pfeil 33 Datenspeicherung
Pfeil 33.1 Komprimierte Dateien lesen und schreiben – gzip
Pfeil 33.2 XML
Pfeil 33.2.1 ElementTree
Pfeil 33.2.2 SAX – Simple API for XML
Pfeil 33.3 Datenbanken
Pfeil 33.3.1 Pythons eingebaute Datenbank – sqlite3
Pfeil 33.4 Serialisierung von Instanzen – pickle
Pfeil 33.4.1 Funktionale Schnittstelle
Pfeil 33.4.2 Objektorientierte Schnittstelle
Pfeil 33.5 Das Datenaustauschformat JSON – json
Pfeil 33.6 Das Tabellenformat CSV – csv
Pfeil 33.6.1 reader-Objekte – Daten aus einer CSV-Datei lesen
Pfeil 33.6.2 Dialect-Objekte – eigene Dialekte verwenden
 
Zum Seitenanfang

33.4    Serialisierung von Instanzen – pickle Zur vorigen ÜberschriftZur nächsten Überschrift

Das Modul pickle (dt. »pökeln«) bietet komfortable Funktionen für das Serialisieren von Objekten. Beim Serialisieren eines Objekts wird ein bytes-Objekt erzeugt, das alle Informationen des Objekts speichert, sodass es später wieder durch das sogenannte Deserialisieren rekonstruiert werden kann.

Besonders für die dauerhafte Speicherung von Daten in Dateien ist pickle gut geeignet. Folgende Datentypen können mithilfe von pickle serialisiert bzw. deserialisiert werden:

  • None, True, False
  • numerische Datentypen (int, float, complex, bool)
  • str, bytes
  • sequenzielle Datentypen (tuple, list), Mengen (set, frozenset) und Dictionarys (dict), solange alle ihre Elemente auch von pickle serialisiert werden können
  • globale Funktionen
  • Built-in Functions
  • globale Klassen
  • Klasseninstanzen, deren Attribute serialisiert werden können

Bei Klassen und Funktionen müssen Sie beachten, dass solche Objekte beim Serialisieren nur mit ihrem Klassennamen gespeichert werden. Der Code einer Funktion oder die Definition der Klasse und ihre Attribute werden nicht gesichert. Wenn Sie also beispielsweise eine Instanz einer selbst definierten Klasse deserialisieren möchten, muss die Klasse in dem aktuellen Kontext genauso wie bei der Serialisierung definiert sein. Ist das nicht der Fall, wird ein UnpicklingError erzeugt.

Es gibt vier Formate, in denen pickle seine Daten speichern kann. Jedes dieser Formate hat eine Identifikationsnummer. Tabelle 33.9 listet die verfügbaren Protokolle auf und nennt die Version von Python, in der das jeweilige Protokoll eingeführt wurde:

Nummer Eingeführt in Bemerkungen
0 ASCII-Format
1 Binärformat
2 Python 2.3 Binärformat
3 Python 3.0 Binärformat
4 Python 3.4 Binärformat

Tabelle 33.9    Die pickle-Protokolle

Das Modul pickle bietet seine Funktionalität über zwei Schnittstellen an: eine über die Funktionen dump und load und eine objektorientierte mit den Klassen Pickler und Unpickler.

Um pickle verwenden zu können, muss das Modul importiert werden:

>>> import pickle
 
Zum Seitenanfang

33.4.1    Funktionale Schnittstelle Zur vorigen ÜberschriftZur nächsten Überschrift

pickle.dump(obj, file, [protocol])

Diese Funktion schreibt die Serialisierung von obj in das Dateiobjekt file. Das übergebene Dateiobjekt muss dabei für den Schreibzugriff geöffnet worden sein.

Mit dem Parameter protocol können Sie das Protokoll für die Speicherung übergeben. Der Standardwert für protocol ist 3. Geben Sie ein Binärformat an, muss das für file übergebene Dateiobjekt im binären Schreibmodus geöffnet worden sein.

>>> with open("pickle-test.dat", "wb") as f:
... pickle.dump([1, 2, 3], f)

Für file können Sie neben echten Dateiobjekten jedes Objekt übergeben, das eine write-Methode mit einem String-Parameter implementiert, zum Beispiel StringIO-Instanzen.

pickle.load(file)

Diese Funktion lädt – ausgehend von der aktuellen Leseposition des Dateiobjekts file – das nächste serialisierte Objekt. Dabei erkennt load selbstständig, in welchem Format die Daten gespeichert wurden.

Das folgende Beispiel setzt voraus, dass im aktuellen Arbeitsverzeichnis eine Datei mit dem Namen pickle-test.dat existiert, die eine serialisierte Liste enthält:

>>> with open("pickle-test.dat", "rb") as f:
... print(pickle.load(f))
[1, 2, 3]

Auch hier müssen Sie darauf achten, die Dateien im Binärmodus zu öffnen, wenn Sie andere pickle-Protokolle als 0 verwenden.

pickle.dumps(obj, [protocol])

Diese Funktion gibt die serialisierte Repräsentation von obj als bytes-String zurück, wobei der Parameter protocol angibt, welches der drei Serialisierungsprotokolle verwendet werden soll. Standardmäßig wird das Protokoll mit der Kennung 3 benutzt.

>>> pickle.dumps([1, 2, 3])
b'\x80\x03]q\x00(K\x01K\x02K\x03e.'

pickle.loads(string)

Diese Funktion stellt das in string serialisierte Objekt wieder her. Das verwendete Protokoll wird dabei automatisch erkannt, und überflüssige Zeichen am Ende des Strings werden ignoriert:

>>> s = pickle.dumps([1, 2, 3])
>>> pickle.loads(s)
[1, 2, 3]
 
Zum Seitenanfang

33.4.2    Objektorientierte Schnittstelle Zur vorigen ÜberschriftZur nächsten Überschrift

Gerade dann, wenn viele Objekte in dieselbe Datei serialisiert werden sollen, ist es lästig und schlecht für die Lesbarkeit, jedes Mal das Dateiobjekt und das zu verwendende Protokoll bei den Aufrufen von dump mit anzugeben.

Neben den schon vorgestellten Modulfunktionen gibt es deshalb noch die beiden Klassen Pickler und Unpickler.

Pickler und Unpickler haben außerdem den Vorteil, dass Klassen von ihnen erben und so die Serialisierung anpassen können.

pickle.Pickler(file, [protocol])

Die beiden Parameter file und protocol haben die gleiche Bedeutung wie bei der pickle.dump-Funktion. Das resultierende Pickler-Objekt hat eine Methode namens dump, die als Parameter ein Objekt erwartet, das serialisiert werden soll.

Alle an die load-Methode gesendeten Objekte werden in das beim Erzeugen der Pickler-Instanz übergebene Dateiobjekt geschrieben.

>>> with open("eine_datei.dat", "wb") as f:
... p = pickle.Pickler(f, 2)
... p.dump({"vorname" : "Donald", "nachname" : "Duck"})
... p.dump([1, 2, 3, 4])

pickle.Unpickler(file)

Das Gegenstück zu Pickler ist Unpickler, um aus der übergebenen Datei die ursprünglichen Daten wiederherzustellen. Unpickler-Instanzen besitzen eine parameterlose Methode namens load, die jeweils das nächste Objekt aus der Datei liest.

Das folgende Beispiel setzt voraus, dass die im Beispiel zur Pickler-Klasse erzeugte Datei eine_datei.dat im aktuellen Arbeitsverzeichnis liegt:

>>> with open("eine_datei.dat", "rb") as f:
... u = pickle.Unpickler(f)
... print(u.load())
... print(u.load())
{'vorname': 'Donald', 'nachname': 'Duck'}
[1, 2, 3, 4]

 


Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
 Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Python 3 Python 3
Jetzt Buch bestellen

 Buchempfehlungen
Zum Rheinwerk-Shop: Einstieg in Python
Einstieg in Python


Zum Rheinwerk-Shop: Python. Der Grundkurs
Python. Der Grundkurs


Zum Rheinwerk-Shop: Algorithmen mit Python
Algorithmen mit Python


Zum Rheinwerk-Shop: Objektorientierte Programmierung
Objektorientierte Programmierung


Zum Rheinwerk-Shop: Raspberry Pi. Das umfassende Handbuch
Raspberry Pi. Das umfassende Handbuch


Zum Rheinwerk-Shop: Roboter-Autos mit dem Raspberry Pi
Roboter-Autos mit dem Raspberry Pi


Zum Rheinwerk-Shop: Neuronale Netze programmieren mit Python
Neuronale Netze programmieren mit Python


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo

 
 


Copyright © Rheinwerk Verlag GmbH 2020
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 
[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern