首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dill在使用"load“时删除对象

Dill在使用"load“时删除对象
EN

Stack Overflow用户
提问于 2018-12-04 19:36:34
回答 1查看 103关注 0票数 1

我犯了一个让我发疯的错误。生成一些数值模拟数据sim_data.dill,并将其保存到计算机上的一个目录中。

代码语言:javascript
复制
with open(os.path.join(original_directory, 'sim_data.dill'), 'w' as f:
    dill.dump(outputs, f)

这个数据大约是1GB,需要一段时间才能生成。现在,当我尝试从另一个程序加载该文件时,我将该文件从original_directory复制到new_directory

代码语言:javascript
复制
simfile  = '/new_directory/sim_data.dill'
with open(simfile, 'r') as f:
    outputs = dill.load(f)

两件事中的一件发生了:

  1. 这个程序说UnpicklingError: [Errno 2] No such file or directory: .../original_directory/sim_data.dill.文件丢失了这意味着dill将original_directory放入文件的元数据中,并在文件被移动时拒绝打开它;真正骇人听闻的行为。
  2. 当我将文件复制回new_directory时,尝试打开它会给出一个EOFError,dill 将文件更改为零字节,实质上删除它为。更糟的是。

通过使用标准的with open(simfile, 'r') as f; print f.readlines(),我可以很好地读取文件,但是在试图恢复文件的内部类结构时,这显然没有帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-04 23:46:36

显然,这是dill的正常行为;请参阅:

https://github.com/uqfoundation/dill/issues/296

转述:文件位置是要被腌制的文件句柄的一部分,因此在没有这些信息的情况下不可能对其进行解密。这显然意味着,如果您将一个.dill文件保存在一个位置,则手动移动该文件(例如,到一个更方便的目录),然后尝试再次打开它,它将无法工作。

关于删除问题,上述文章的作者建议使用fmode=FMODE_PRESERVEDATAhttps://github.com/matsjoyce/dill/blob/087c00899ef55f31d36e7aee51a958b17daf8c91/dill/dill.py#L136-L145上列出的其他文件模式之一。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53620238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档