Necesito guardar alrededor de una docena de objetos en un archivo y luego restaurarlos. Intenté usar un bucle for con pickle y shelve pero no funcionó bien.
Editar.
Todos los objetos que estaba tratando de guardar estaban en la misma clase (debería haber mencionado esto antes), y no me di cuenta de que podía guardar toda la clase así:
import pickle
def saveLoad(opt):
global calc
if opt == "save":
f = file(filename, 'wb')
pickle.dump(calc, f, 2)
f.close
print 'data saved'
elif opt == "load":
f = file(filename, 'rb')
calc = pickle.load(f)
else:
print 'Invalid saveLoad option'
Respuestas:
Si necesita guardar varios objetos, simplemente puede ponerlos en una sola lista o tupla, por ejemplo:
Si tiene muchos datos, puede reducir el tamaño del archivo pasando
protocol=-1
adump()
;pickle
entonces utilizará el mejor protocolo disponible en lugar del protocolo histórico predeterminado (y más compatible con versiones anteriores). En este caso, el archivo debe abrirse en modo binario (wb
yrb
, respectivamente).El modo binario también debe usarse con Python 3, ya que su protocolo predeterminado produce datos binarios (es decir, que no son de texto) (modo de escritura
'wb'
y modo de lectura'rb'
).fuente
with open('objs.pickle', 'wb') as f:
(observe elwb
).with open('objs.pkl') as f:
comparar simplementeobj1, obj2 = pickle.load(open("objs.pkl","rb"))
? ¿Hay alguna diferencia entre estos dos?Hay una biblioteca incorporada llamada
pickle
. Usandopickle
puede volcar objetos a un archivo y cargarlos más tarde.fuente
f = open('store.pckl', 'wb')
para abrir un archivo para escribir. Consulte stackoverflow.com/questions/13906623/… Y use `f = open ('store.pckl', 'rb') para abrir un archivo para leer. Consulte stackoverflow.com/questions/7031699/… .Debería mirar los módulos de estantería y encurtidos . Si necesita almacenar muchos datos, puede ser mejor usar una base de datos
fuente
Otro enfoque para guardar múltiples variables en un archivo pickle es:
fuente
Puede usar
klepto
, que proporciona almacenamiento en caché persistente en la memoria, el disco o la base de datos.Luego, después de reiniciar el intérprete ...
Obtenga el código aquí: https://github.com/uqfoundation
fuente
El siguiente enfoque parece simple y se puede utilizar con variables de diferente tamaño:
fuente
hickle
El paquete es más robusto (menos propenso a errores) e incluso más simple (menos código) quepickle
.