Pregunta

Estoy aprendiendo sobre la serialización de objetos por primera vez. He intentado leyendo y 'googlear' por las diferencias en los módulos de la salmuera y de dejar de lado, pero no estoy seguro de entenderlo. Cuándo utilizar cuál? La salmuera se puede convertir cada objeto de Python en la corriente de bytes que se pueden persistió en un archivo. Entonces, ¿por qué es necesario el dejar de lado el módulo? No se decapar más rápido?

¿Fue útil?

Solución

pickle es para serializar un objeto (u objetos) como una sola corriente de bytes en un archivo.

shelve construye en la parte superior de pickle e implementa un diccionario de serialización en la que se conservan en vinagre objetos, pero asociada a una clave (una cuerda), para que pueda cargar el archivo de datos de archivado y acceder a sus objetos en vinagre a través de teclas. Esto podría ser más conveniente era que seas serializando muchos objetos.

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

pickle Ejemplo

import pickle

integers = [1, 2, 3, 4, 5]

with open('pickle-example.p', 'wb') as pfile:
    pickle.dump(integers, pfile)

Esto volcar la lista integers a un archivo binario llamado pickle-example.p.

Ahora trate de leer la parte posterior archivo en escabeche.

import pickle

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

lo anterior debe [1, 2, 3, 4, 5] de salida.

shelve Ejemplo

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

Aviso cómo añadir objetos a la plataforma a través de diccionario-como el acceso.

Leer la parte de atrás con el objeto en 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].

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top