I'm taking all the filenames in a certain directory in a list, and would like to write this list in a pickle file. Here's the code I am using:
import _pickle as pickle
with open(filepath+'filenames.pkl', 'wb') as f:
pickle.dump(filenames, f)
This gives me the following error:
---------------------------------------------------------------------------
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'
I am supposed to create this file. Why is this file expected already?
(I'm using Python 3.6.)
In your case most probably /data/train/ directory does not exist
I tried this code and got same error:
import pickle as pickle
filenames='sadasdas'
with open('/tmp/not_exist/filenames.pkl', 'wb') as f:
pickle.dump(filenames, f)
output:
---------------------------------------------------------------------------
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'
You can handle this problem by making sure the directory exists before writing to file: Programatic approach to do the same is this
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)
I also had the same problem but none of the answers helped me.
The directories were there and I used wb, but again and again the same problem.
I hope this helps some who have the same issue: I found out that the problem was that I had a lot of folders, also the name of the file was too long (due to the fact that I made up the filename as a string in which I was trying to indicate the characteristics of that file) and the folder that I was trying to dump into would raise "The file name(s) would be too long for the destination folder" when I tried to move that file manually.
After shortening the file name, the problem was resolved.
I had a similar problem while writing using a relative pathname (and a symlink). The directory defiantly existed but it was still raising the FileNotFoundError.
The problem disappeared when I switched to using the absolute path
abspath = pathlib.Path(filename).absolute()
with open(str(abspath), 'wb') as f:
pickle.dump(thing_to_pickle, f)