La pregunta puede parecer un poco básica, pero no pude encontrar nada que entendiera en Internet. ¿Cómo almaceno algo que encurtí con eneldo?
He llegado hasta aquí por guardar mi construcción (pandas DataFrame, que también contiene clases personalizadas):
import dill dill_file = open("data/2017-02-10_21:43_resultstatsDF", "wb") dill_file.write(dill.dumps(resultstatsDF)) dill_file.close()y para leer
dill_file = open("data/2017-02-10_21:43_resultstatsDF", "rb") resultstatsDF_out = dill.load(dill_file.read()) dill_file.close()pero yo al leer me sale el error
TypeError: file must have 'read' and 'readline' attributes¿Cómo hago esto?
EDITAR para futuros lectores: después de haber usado este enfoque (para encurtir mi DataFrame) por un tiempo, ahora me abstengo de hacerlo. Resulta que las diferentes versiones del programa (incluidos los objetos que pueden almacenarse en el archivo de eneldo) pueden hacer que no se pueda recuperar el archivo encurtido. Ahora me aseguro de que todo lo que quiero guardar se pueda expresar como una cadena (de la manera más eficiente posible), en realidad una cadena legible por humanos. Ahora, almaceno mis datos como CSV. Los objetos en celdas CSV pueden estar representados por formato JSON. De esa manera me aseguro de que mis archivos serán legibles en los próximos meses y años. Incluso si el código cambia, puedo reescribir los codificadores analizando las cadenas y puedo entender el CSV al inspeccionarlo manualmente.
Solo dale el archivo sin la read :
resultstatsDF_out = dill.load(dill_file)también puedes eneldo para archivar así:
with open("data/2017-02-10_21:43_resultstatsDF", "wb") as dill_file: dill.dump(resultstatsDF, dill_file)Asi que:
dill.dump(obj, open_file)escribe en un archivo directamente. Mientras:
dill.dumps(obj) serializa obj y puede escribirlo para archivarlo usted mismo.
Igualmente:
dill.load(open_file)lee de un archivo, y:
dill.loads(serialized_obj)construye un objeto a partir de un objeto serializado, que puede leer desde un archivo.
Se recomienda abrir un archivo usando la instrucción with .
Aquí:
with open(path) as fobj: # do somdthing with fobjtiene el mismo efecto que:
fobj = open(path) try: # do somdthing with fobj finally: fobj.close() El archivo se cerrará tan pronto como deje la sangría de la declaración with , incluso en el caso de una excepción.