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.
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
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.