28.06.2017 Views

Python para todos

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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