写入Pickle文件时出现FileNotFoundError

时间:2017-03-05 03:05:10

标签: python pickle

我正在list中的某个目录中获取所有文件名,并希望将此列表写入pickle文件中。这是我正在使用的代码:

import _pickle as pickle
with open(filepath+'filenames.pkl', 'wb') as f:
    pickle.dump(filenames, f)

这给了我以下错误:

---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
<ipython-input-32-c59e6889d2fe> in <module>()
      1 import _pickle as pickle
----> 2 with open(dpath+'filenames.pkl', 'wb') as f:
      3     pickle.dump(filenames, f)

FileNotFoundError: [Errno 2] No such file or directory: '/data/train/filenames.pkl'

我应该创建这个文件,为什么要预期这个文件?

(我正在使用Python 3.6) 任何帮助将不胜感激。

TIA。

7 个答案:

答案 0 :(得分:3)

在您的情况下,很可能/data/train/目录不存在

我尝试了这段代码并得到了同样的错误:

import pickle as pickle
filenames='sadasdas'
with open('/tmp/not_exist/filenames.pkl', 'wb') as f:
    pickle.dump(filenames, f)

输出:

---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
<ipython-input-7-6a22c2148796> in <module>()
      1 import pickle as pickle
      2 filenames='sadasdas'
----> 3 with open('/tmp/not_exist/filenames.pkl', 'wb') as f:
      4     pickle.dump(filenames, f)

FileNotFoundError: [Errno 2] No such file or directory: '/tmp/not_exist/filenames.pkl'

您可以通过在写入文件之前确保目录存在来处理此问题:编程方法也是如此

import os
filename = "/tmp/not_exist/filenames.pkl"
os.makedirs(os.path.dirname(filename), exist_ok=True)
data = 'sadasdas'
with open('/tmp/not_exist/filenames.pkl', 'wb') as f:
    pickle.dump(data, f)

参考:https://stackoverflow.com/a/12517490/3027854

答案 1 :(得分:1)

我也遇到了同样的问题,但是没有一个答案对我有帮助。 目录在那里,我使用了wb,但是一次又一次地遇到相同的问题。

我希望这对遇到相同问题的人有所帮助: 我发现问题是我有很多文件夹,文件名也太长(由于我将文件名组成一个字符串,试图在其中指示该文件的特征,这是事实) ),而当我尝试手动移动该文件时,我尝试转储到的文件夹将显示“该文件名对于目标文件夹而言太长”。

缩短文件名后,问题已解决。

答案 2 :(得分:0)

使用相对路径名(和符号链接)编写时遇到了类似的问题。该目录确实存在,但它仍然引发FileNotFoundError。

当我切换到使用绝对路径

时问题消失了
abspath = pathlib.Path(filename).absolute()
with open(str(abspath), 'wb') as f:
    pickle.dump(thing_to_pickle, f)

答案 3 :(得分:0)

我必须使用可控制的文件夹访问权限&#39;来自Windows 10上的Windows防御者。

其他防病毒/防火墙可能会产生同样的效果。

https://support.microsoft.com/en-us/help/4046851/windows-10-controlled-folder-access-windows-defender-security-center

答案 4 :(得分:0)

确保您使用的filepath是计算机中确实存在的。有时,我们从其他地方复制并粘贴代码,而忘记更改驱动器名称。您可能正在寻址不存在的驱动器。

答案 5 :(得分:0)

  • 确保文件路径已经存在。
  • 如果路径很长,请在路径之前添加魔术前缀\\?\path = '\\\\?\\C:\\Users...

答案 6 :(得分:0)

import os
import sys
import pickle

filenamelst = ['a.txt','b.py','c.ipynb']
filenamelst_abspathname = os.path.abspath('filenamelst.pickle')
print(filenamelst_abspathname)
picklefile = open(str(filenamelst_abspathname),'wb')
pickle.dump(filenamelst, picklefile)
picklefile.close()

这有效。在您的Google Colab Notebook的侧面,泡菜文件将位于会话文件夹中。您需要从那里下载。