A Byte of Python

Pickle

Python fornisce un modulo standard chiamato pickle usando il quale è possibile memorizzare qualsiasi oggetto Python in un file e riottenerlo intatto. Questa procedura è chiamata memorizzazione permanente di un oggetto.

Esiste un altro modulo chiamato cPickle che funziona esattamente come il modulo pickle eccetto per il fatto che è scritto in linguaggio C ed è (oltre 1000 volte) più veloce. Si possono usare entrambi i moduli, anche se per l'esempio verrà utilizzato il modulo cPickle. Si ricordi, comunque, che si farà riferimento ad entrambi i moduli semplicemente come al modulo pickle.

Serializzazione e deserializzazione

Esempio 12.2. Serializzare e deserializzare

				
#!/usr/bin/python
# Filename: pickling.py

import cPickle as p
#import pickle as p

shoplistfile = 'shoplist.data'	# nome del file in cui verrà memorizzato l'oggetto

shoplist = ['apple', 'mango', 'carrot']

# Scrittura nel file
f = file(shoplistfile, 'w')
p.dump(shoplist, f) 		# crea il dump dell'oggetto nel file
f.close()

del shoplist 			# rimozione di shoplist

# Lettura dal file memorizzato
f = file(shoplistfile)
storedlist = p.load(f)
print storedlist
				
				

Output

				
$ python pickling.py
['apple', 'mango', 'carrot']
				
				

Funzionamento

La prima cosa da notare è l'uso della sintassi import..as, utile in questo caso dato che si vuole usare un nome corto per il modulo. Inoltre permette di passare tra i differenti moduli (cPickle o pickle) semplicemente cambiando una linea. Nel resto del programma si farà riferimento a questo modulo come a p.

Per memorizzare un oggetto in un file, occorre prima aprire un oggetto file in modalità scrittura, e quindi scrivervi l'oggetto usando la funzione dump del modulo pickle. Questo processo viene chiamato serializzazione.

Per riottenere l'oggetto si usa la funzione load del modulo pickle che restituisce l'oggetto. Questo processo viene chiamato deserializzazione.