How to dill (pickle) to file?

2019-06-19 23:09发布

问题:

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?

回答1:

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.



标签: python dill