Reputation: 1
I am trying to get a bunch of images from a directory and python gives me this error: FileNotFoundError: [Errno 2] No such file or directory: 'File1.jpg'
But 'File1.jpg' is the first file in the directory. Here is the code including the error:
filenames = [os.path.join(dirname, fname) for fname in os.listdir(dirname)]
filenames = filenames[:100]
assert(len(filenames) == 100)
filenames = [fname_i for fname_i in os.listdir(dirname)
if fname_i.endswith('.jpg')]
imgs = [plt.imread(fname)[..., :3] for fname in filenames]
fails with FileNotFoundError and the following traceback:
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
<ipython-input-9-bf6a187847c5> in <module>()
----> 1 imgs = [plt.imread(fname)[..., :3] for fname in filenames]
<ipython-input-9-bf6a187847c5> in <listcomp>(.0)
----> 1 imgs = [plt.imread(fname)[..., :3] for fname in filenames]
/Users/dampa/anaconda/lib/python3.5/site-packages/matplotlib/pyplot.py in imread(*args, **kwargs)
2295 @docstring.copy_dedent(_imread)
2296 def imread(*args, **kwargs):
-> 2297 return _imread(*args, **kwargs)
2298
2299
/Users/dampa/anaconda/lib/python3.5/site-packages/matplotlib/image.py in imread(fname, format)
1304
1305 if ext not in handlers:
-> 1306 im = pilread(fname)
1307 if im is None:
1308 raise ValueError('Only know how to handle extensions: %s; '
/Users/dampa/anaconda/lib/python3.5/site-packages/matplotlib/image.py in pilread(fname)
1282 except ImportError:
1283 return None
-> 1284 image = Image.open(fname)
1285 return pil_to_array(image)
1286
/Users/dampa/anaconda/lib/python3.5/site-packages/PIL/Image.py in open(fp, mode)
2278 filename = str(fp.resolve())
2279 if filename:
-> 2280 fp = builtins.open(filename, "rb")
2281
2282 try:
FileNotFoundError: [Errno 2] No such file or directory: 'File1.jpg'
Upvotes: 0
Views: 1720
Reputation: 140168
the first time, you're doing it right, adding directory name:
In [5]: filenames = [os.path.join(dirname, fname)
...: ...: for fname in os.listdir(dirname)]
but in your filter you're omitting to add directory name again.
That would be only repeats of Moinuddin's comment if it wasn't for a better solution: simply use glob
to filter AND get absolute path:
import glob
filenames = glob.glob(os.path.join(dirname,'*.jpg'))
Upvotes: 1