que objeto guardar archivo python object pickle shelve object-serialization

objeto - modulo shelve python



¿Cuál es la diferencia entre pickle y shelve? (1)

pickle es para serializar algún objeto (u objetos) como un único bytest en un archivo.

shelve basa en pickle e implementa un diccionario de serialización donde los objetos se escanean, pero se asocian con una clave (alguna cadena), para que pueda cargar su archivo de datos archivados y acceder a sus objetos escabeados a través de las claves. Esto podría ser más conveniente si estuviera serializando muchos objetos.

Aquí hay un ejemplo de uso entre los dos. (debería funcionar en las últimas versiones de Python 2.7 y Python 3.x).

Ejemplo de pickle

import pickle integers = [1, 2, 3, 4, 5] with open(''pickle-example.p'', ''wb'') as pfile: pickle.dump(integers, pfile)

Esto arrojará la lista de integers a un archivo binario llamado pickle-example.p .

Ahora intenta leer el archivo escabechado de nuevo.

import pickle with open(''pickle-example.p'', ''rb'') as pfile: integers = pickle.load(pfile) print integers

Lo anterior debería generar [1, 2, 3, 4, 5] .

ejemplo shelve

import shelve integers = [1, 2, 3, 4, 5] # If you''re using Python 2.7, import contextlib and use # the line: # with contextlib.closing(shelve.open(''shelf-example'', ''c'')) as shelf: with shelve.open(''shelf-example'', ''c'') as shelf: shelf[''ints''] = integers

Observe cómo agrega objetos al estante a través de un acceso tipo diccionario.

Lea el objeto de nuevo con un código como el siguiente:

import shelve # If you''re using Python 2.7, import contextlib and use # the line: # with contextlib.closing(shelve.open(''shelf-example'', ''r'')) as shelf: with shelve.open(''shelf-example'', ''r'') as shelf: for key in shelf.keys(): print(repr(key), repr(shelf[key])))

La salida será ''ints'', [1, 2, 3, 4, 5] .

Estoy aprendiendo acerca de la serialización de objetos por primera vez. Intenté leer y buscar en Google las diferencias en los módulos de pickle y shelve, pero no estoy seguro de entenderlo. ¿Cuándo usar cuál? Pickle puede convertir cada objeto python en una secuencia de bytes que puede persistir en un archivo. Entonces, ¿por qué necesitamos que el módulo deje de funcionar? ¿No es más rápido el encurtido?