A Byte of Python

Pickle

Python ens proporciona un mòdul estàndard anomenat pickle que ens permet emmagatzemar qualsevol objecte Python en un fitxer i recuperar-ho posteriorment. Es diu que l'objecte es guarda persistentment.

Hi ha un altre mòdul anomenat cPickle, amb el mateix funcionament de pickle però escrit en llenguatge C de manera que funciona més de 100 cops més ràpid. Malgrat podem fer servir qualsevol dels dos mòduls, aquí usarem el cPickle. Per simplicitat ens referirem a tots dos mòduls com pickle.

La paraula pickle dóna una idea de conserva dins de l'idioma anglès. En aquest text mantindrem el mot original per evitar confusions.

Pickling i Unpickling

Example 12.2. Pickling i Unpickling

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

import cPickle as p
#import pickle as p

shoplistfile = 'shoplist.data' # el nom del fitxer on guardarem l'objecte

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

# Escrivim al fitxer
f = file(shoplistfile, 'w')
p.dump(shoplist, f) # bolquem l'objecte al fitxer
f.close()

del shoplist # eliminem shoplist

# Tornem a llegir l'objecte emmagatzemat
f = file(shoplistfile)
storedlist = p.load(f)
print storedlist
				
				

Sortida

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

Com funciona

En primer lloc notem l'ús de la sintaxi import..as per a canviar el nom del mòdul. És quelcom útil per a fer a referir-nos al mòdul amb un nom més curt, però també, com passa en aquest cas, per a permetre'ns que la resta del codi faci servir indiferentment qualsevol dels dos mòduls (cPickle o pickle) simplement canviant el comentari. Així, a la resta del programa simplement ens referim al mòdul amb p.

Per a guardar l'objecte al fitxer, primer obrim el fitxer en mode escriptura. A continuació escrivim l'objecte amb la funció dump del mòdul pickle. D'aquest procés en diem pickling.

A continuació recuperem l'objecte fent servir la funció load del mòdul pickle. D'aquest procés en diem unpickling.