A Byte of Python

Eingemachtes

Jetzt geht's ans 'Eingemachte'. Python stellt ein Standard-Modul namens pickle ('einmachen') zu Verfügung, mit dessen Hilfe man jedes Python-Objekt in eine Datei speichern kann und es dann später wieder intakt zurück erhält. Man nennt dies die persistente Speicherung eines Objekts. Sie können Sich dies auch als das 'Einfrieren' und wieder 'Auftauen' eines Objekts vorstellen.

Es gibt ein anderes Modul namens cPickle, das ganz genauso wie das pickle-Modul funktioniert, außer dass es in der Sprache C geschrieben und daher (bis zu 1000 mal) schneller ist. Sie können sich aussuchen, welches der beiden Module Sie verwenden wollen, auch wenn wir hier als Beispiel das Modul cPickle verwenden. Denken Sie aber daran, dass wir der Einfachheit halber immer nur vom pickle-Modul sprechen.

Einfrieren und wieder Auftauen

Beispiel 12.2. Einfrieren und wieder Auftauen (einmachen.py)

				
#!/usr/bin/python

import cPickle as p
#import pickle as p

einkaufsdatei = 'einkaufsliste.data' # Datei, in der wir das Objekt speichern

einkaufsliste = ['Aepfel', 'Mangos', 'Karotten']

# Schreibe in die Datei
f = file(einkaufsdatei, 'w')
p.dump(einkaufsliste, f) # speichere das Objekt in der Datei
f.close()

del einkaufsliste # loesche die einkaufsliste

# Lies die Einkaufsliste aus der Datei wieder ein
f = file(einkaufsdatei)
gespeicherteliste = p.load(f)
print gespeicherteliste
				
				

Ausgabe

				
$ python einmachen.py
['Aepfel', 'Mangos', 'Karotten']
				
				

So funktioniert es

Beachten Sie als erstes, dass wir die import..as-Syntax verwendet haben. Dies ist praktisch, denn wir können einen kürzeren Namen für das Modul verwenden. Es ermöglicht uns in diesem Fall sogar, ein anderes Modul (cPickle oder pickle) zu verwenden, indem wir einfach nur eine Zeile ändern! Im Rest des Programms beziehen wir uns auf dieses Modul als p.

Um ein Objekt in einer Datei zu speichern, öffnen wir zunächst ein file-Objekt im Schreibmodus und speichern das Objekt in der offenen Datei, indem wir die Funktion dump des pickle-Moduls benutzen. Dieser Vorgang wird als das Einmachen (pickling) oder Einfrieren bezeichnet.

Als Nächstes holen wir das Objekt mit der Funktion load des pickle-Moduls wieder zurück. Dieser Vorgang wird als Wiederauftauen (oder unpickling) bezeichnet.