使用莳萝或泡菜后无法检索数据

时间:2019-07-16 21:30:49

标签: python-3.x google-cloud-platform jupyter-notebook pickle dill

我使用dill.dump_session(filename)转储了Jupyter Notebook会话,有一次它告诉我磁盘存储已满。但是,我在磁盘上留出一些空间,然后重试。现在,我无法使用dill.load_session(filename)重新加载会话。

我收到以下错误:

~/.local/lib/python3.6/site-packages/dill/_dill.py in load_session(filename, main)
    408         unpickler._main = main
    409         unpickler._session = True
--> 410         module = unpickler.load()
    411         unpickler._session = False
    412         main.__dict__.update(module.__dict__)

 EOFError: Ran out of input

文件(即文件名)的数据大小约为30 gigs。

如何从文件中检索数据?

顺便说一句,我正在Google Cloud上运行所有这些程序,并且要花大量的时间才能保持实例的正常运行。

我尝试使用undill和其他unpickle方法。

例如,我尝试过:

 open(file, 'a').close()
      try:
     with open(file, "rb") as Score_file:
            unpickler = pickle.Unpickler(Score_file)
            scores = unpickler.load()
            return scores

但是出现此错误:

      `6         with open(file, "rb") as Score_file:
       7             unpickler = pickle.Unpickler(Score_file);
 ----> 8             scores = unpickler.load();
       9 
      10             return scores

   ModuleNotFoundError: No module named '__builtin__'`

1 个答案:

答案 0 :(得分:0)

我知道这可能不是您想听到的答案,但是...听起来您的泡菜文件已损坏。在这种情况下,只有手动编辑数据,您才能取回数据,并且可以了解腌制的字符串是什么以及它们的结构。请注意,在某些极少数情况下,对象会dump,但不会load-但是,您的文件损坏的可能性更大。无论哪种方式,分辨率都是相同的...手动编辑是可能保存您腌制的内容的唯一方法。

此外,请注意,如果您使用dump_session,则实际上应该使用load_session(因为它是在标准load之上执行的一系列步骤,与{ {1}}),与问题无关紧要,但是问题可能是泡菜文件不完整或损坏。