Python ';FileNotFoundError:[Errno 2]没有这样的文件或目录';尝试将目录中的图像从JPG转换为PNG文件时

Python ';FileNotFoundError:[Errno 2]没有这样的文件或目录';尝试将目录中的图像从JPG转换为PNG文件时,python,operating-system,Python,Operating System,我是Python新手,我正在尝试将我的文件(JPG)中的所有图像转换为PNG格式 我正在使用以下代码: from PIL import Image import os #Image directory directory = "D:\\weeds" for filename in os.listdir(directory): if filename.endswith(".jpg"): prefix = filename.sp

我是Python新手,我正在尝试将我的文件(JPG)中的所有图像转换为PNG格式

我正在使用以下代码:

from PIL import Image
import os

#Image directory
directory = "D:\\weeds"

for filename in os.listdir(directory): 
    if filename.endswith(".jpg"): 
        prefix = filename.split(".jpg")[0]
        im = Image.open(filename)
        im.save(prefix+'.png')  
    else: 
        continue
但是,会生成以下错误:

---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
<ipython-input-26-871d84dccfb2> in <module>
      7     if filename.endswith(".jpg"):
      8         prefix = filename.split(".jpg")[0]
----> 9         im = Image.open(filename)
     10         im.save(prefix+'.png')
     11     else:

~\lib\site-packages\PIL\Image.py in open(fp, mode)
   2876 
   2877     if filename:
-> 2878         fp = builtins.open(filename, "rb")
   2879         exclusive_fp = True
   2880 

FileNotFoundError: [Errno 2] No such file or directory: 'weed0.jpg'
---------------------------------------------------------------------------
FileNotFoundError回溯(最近一次调用上次)
在里面
7如果filename.endswith(“.jpg”):
8 prefix=filename.split(“.jpg”)[0]
---->9 im=Image.open(文件名)
10即时保存(前缀+'.png')
11其他:
~\lib\site packages\PIL\Image.py处于打开状态(fp,模式)
2876
2877如果文件名:
->2878 fp=builtins.open(文件名为“rb”)
2879排他_fp=真
2880
FileNotFoundError:[Errno 2]没有这样的文件或目录:“weed0.jpg”
此图像清晰地显示在我的目录中:


如何修复此错误,并将所有JPG图像转换为PNG?

问题在于
os.listdir
提供了叶文件名。它不会提供完整的路径。例如,在您的情况下,目录是
“D:\\weeds”
,因此来自
os.listdir
的任何结果都会为您命名
“foo”
“bar”
,而不是
“D:\\weeds\foo”
。为了从任何工作目录中使用
os.listdir
的结果,您需要使用
os.path.join
“D:\\weeds”
组成完整、正确的路径。

谢谢。在我的代码中,是否将
os.listdir(D:\\weeds)
替换为
os.path.join(D:\\weeds)
?我不知道该把它放在哪里,因为我是
os
模块的新手。不,
os.path.join
返回一个新路径,然后可以传递给
open
函数,比如
Image.open(os.path.join(“D:\\weed”,filename))