Python看到文件名,但给出“[Errno 2]没有这样的文件或目录”

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)

我试图从一个目录中获取一组图像,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 = [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谢谢,成功了@让·弗朗索瓦·法布:谢谢你的编辑,我会记住这一点。