The question may seem a little basic, but wasn't able to find anything that I understood in the internet. How do I store something that I pickled with dill?
I have come this far for saving my construct (pandas DataFrame, which also contains custom classes):
import dill
dill_file = open("data/2017-02-10_21:43_resultstatsDF", "wb")
dill_file.write(dill.dumps(resultstatsDF))
dill_file.close()
and for reading
dill_file = open("data/2017-02-10_21:43_resultstatsDF", "rb")
resultstatsDF_out = dill.load(dill_file.read())
dill_file.close()
but I when reading I get the error
TypeError: file must have 'read' and 'readline' attributes
How do I do this?
Just give it the file without the read
:
resultstatsDF_out = dill.load(dill_file)
you can also dill to file like this:
with open("data/2017-02-10_21:43_resultstatsDF", "wb") as dill_file:
dill.dump(resultstatsDF, dill_file)
So:
dill.dump(obj, open_file)
writes to a file directly. Whereas:
dill.dumps(obj)
serializes obj
and you can write it to file yourself.
Likewise:
dill.load(open_file)
reads from a file, and:
dill.loads(serialized_obj)
constructs an object form a serialized object, which you could read from a file.
It is recommended to open a file using the with
statement.
Here:
with open(path) as fobj:
# do somdthing with fobj
has the same effect as:
fobj = open(path)
try:
# do somdthing with fobj
finally:
fobj.close()
The file will be closed as soon as you leave the indention of the with
statement, even in the case of an exception.