Python看到文件名,但给出“[Errno 2]没有这样的文件或目录”
我试图从一个目录中获取一组图像,python给了我以下错误:FileNotFoundError:[Errno 2]没有这样的文件或目录:“File1.jpg” 但是'File1.jpg'是目录中的第一个文件。以下是包含错误的代码:Python看到文件名,但给出“[Errno 2]没有这样的文件或目录”,python,file-io,ipython,Python,File Io,Ipython,我试图从一个目录中获取一组图像,python给了我以下错误:FileNotFoundError:[Errno 2]没有这样的文件或目录:“File1.jpg” 但是'File1.jpg'是目录中的第一个文件。以下是包含错误的代码: filenames = [os.path.join(dirname, fname) for fname in os.listdir(dirname)] filenames = filenames[:100] assert(len(filenames) == 100)
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]
失败,出现FileNotFoundError和以下回溯:
---------------------------------------------------------------------------
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'
第一次,您做对了,添加了目录名:
In [5]: filenames = [os.path.join(dirname, fname)
...: ...: for fname in os.listdir(dirname)]
但在您的筛选器中,您忽略了再次添加目录名
如果不是为了更好的解决方案,这将只是Moinuddin评论的重复:只需使用glob进行过滤并获得绝对路径:
import glob
filenames = glob.glob(os.path.join(dirname,'*.jpg'))
您正在访问的文件不在运行脚本的目录中。使用绝对路径打开文件是防止此类错误和调试文件位置的更好方法。顺便说一句,避免python代码的javascript代码段标记。我把它们删掉了。这不是一个简单的工作示例;请看@moinuddinkadri谢谢,成功了@让·弗朗索瓦·法布:谢谢你的编辑,我会记住这一点。