23.11.2012 Views

Python para todos

Python para todos

Python para todos

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Python</strong> <strong>para</strong> <strong>todos</strong><br />

Pero, ¿y si hubiéramos guardado 30 objetos y quisiéramos acceder al<br />

último de ellos? ¿o si no recordáramos en qué posición lo habíamos<br />

guardado? El módulo shelve extiende pickle / cPickle <strong>para</strong> proporcionar<br />

una forma de realizar la serialización más clara y sencilla, en la<br />

que podemos acceder a la versión serializada de un objeto mediante<br />

una cadena asociada, a través de una estructura parecida a un diccionario.<br />

La única función que necesitamos conocer del módulo shelve es open,<br />

que cuenta con un parámetro filename mediante el que indicar la ruta<br />

a un archivo en el que guardar los objetos (en realidad se puede crear<br />

más de un archivo, con nombres basados en filename, pero esto es<br />

transparente al usuario).<br />

La función open también cuenta con un parámetro opcional protocol,<br />

con el que especificar el protocolo que queremos que utilice pickle por<br />

debajo.<br />

Como resultado de la llamada a open obtenemos un objeto Shelf, con<br />

el que podemos trabajar como si de un diccionario normal se tratase (a<br />

excepción de que las claves sólo pueden ser cadenas) <strong>para</strong> almacenar y<br />

recuperar nuestros objetos.<br />

Como un diccionario cualquiera la clase Shelf cuenta con mé<strong>todos</strong><br />

get, has_key, items, keys, values, …<br />

Una vez hayamos terminado de trabajar con el objeto Shelf, lo cerraremos<br />

utilizando el método close.<br />

import shelve<br />

animales = [“piton”, “mono”, “camello”]<br />

lenguajes = [“python”, “mono”, “perl”]<br />

shelf = shelve.open(“datos.dat”)<br />

shelf[“primera”] = animales<br />

shelf[“segunda”] = lenguajes<br />

print shelf[“segunda”]<br />

shelf.close()<br />

116

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!