¿Cuál es la diferencia entre la salmuera y la estantería?
-
29-09-2019 - |
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?
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]
.