我有一个错误使我发疯。我生成一些数值模拟数据sim_data.dill
并使用将其保存到计算机上的目录中
with open(os.path.join(original_directory, 'sim_data.dill'), 'w' as f:
dill.dump(outputs, f)
该数据约为1 Gb,需要一段时间才能生成。现在,当我尝试使用其他程序从其他程序加载文件时,我将该文件从
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: .../
原始目录/sim_data.dill
缺少文件。这意味着莳萝在文件的元数据中放入original_directory
,并在文件移动时拒绝打开它;真正令人震惊的行为。当我将文件复制回
new_directory
时,尝试打开它会得到一个EOFError
,而莳萝将文件更改为零字节,本质上将其删除。更糟的是。我可以使用标准的
with open(simfile, 'r') as f; print f.readlines()
很好地读取文件,但是显然在尝试恢复文件的内部类结构时这无济于事。 最佳答案
显然,这是dill
的正常行为;请参阅:
https://github.com/uqfoundation/dill/issues/296
释义:文件位置是要腌制的文件句柄的一部分,因此如果没有该信息,则无法对其进行腌制。显然,这意味着,如果将.dill
文件保存在一个位置,请手动移动该文件(例如,移至更方便的目录),然后尝试再次打开它,它将无法正常工作。
关于删除问题,以上文章的作者建议使用fmode=FMODE_PRESERVEDATA
或以下列出的其他文件模式之一
https://github.com/matsjoyce/dill/blob/087c00899ef55f31d36e7aee51a958b17daf8c91/dill/dill.py#L136-L145
关于python - dill 在使用“加载”时删除对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53620238/