我犯了一个让我发疯的错误。生成一些数值模拟数据sim_data.dill,并将其保存到计算机上的一个目录中。
with open(os.path.join(original_directory, 'sim_data.dill'), 'w' as f:
dill.dump(outputs, f)这个数据大约是1GB,需要一段时间才能生成。现在,当我尝试从另一个程序加载该文件时,我将该文件从original_directory复制到new_directory。
simfile = '/new_directory/sim_data.dill'
with open(simfile, 'r') as f:
outputs = dill.load(f)两件事中的一件发生了:
UnpicklingError: [Errno 2] No such file or directory: .../original_directory/sim_data.dill.文件丢失了这意味着dill将original_directory放入文件的元数据中,并在文件被移动时拒绝打开它;真正骇人听闻的行为。new_directory时,尝试打开它会给出一个EOFError,dill 将文件更改为零字节,实质上删除它为。更糟的是。通过使用标准的with open(simfile, 'r') as f; print f.readlines(),我可以很好地读取文件,但是在试图恢复文件的内部类结构时,这显然没有帮助。
发布于 2018-12-04 23:46:36
显然,这是dill的正常行为;请参阅:
https://github.com/uqfoundation/dill/issues/296
转述:文件位置是要被腌制的文件句柄的一部分,因此在没有这些信息的情况下不可能对其进行解密。这显然意味着,如果您将一个.dill文件保存在一个位置,则手动移动该文件(例如,到一个更方便的目录),然后尝试再次打开它,它将无法工作。
关于删除问题,上述文章的作者建议使用fmode=FMODE_PRESERVEDATA或https://github.com/matsjoyce/dill/blob/087c00899ef55f31d36e7aee51a958b17daf8c91/dill/dill.py#L136-L145上列出的其他文件模式之一。
https://stackoverflow.com/questions/53620238
复制相似问题