为了账号安全,请及时绑定邮箱和手机立即绑定

FileNotFoundError: [Errno 2] 没有这样的文件或目录:

FileNotFoundError: [Errno 2] 没有这样的文件或目录:

POPMUISE 2021-06-14 13:07:42
我有很多关于路径问题的帖子的类似问题,但我找不到任何解决方案来解决我的问题所以首先,我有一个功能,我在其中创建一个目录,该目录将存储从视频中提取的所有帧def extract_frame(video,folder):    os.mkdir(folder)    vidcap = cv2.VideoCapture(video)    success,image = vidcap.read()    fps = vidcap.get(cv2.CAP_PROP_FPS)    count = 0    success = True    while success:  #os.path.join(pathOut,(name+'.png'))      cv2.imwrite(os.path.join(folder,"frame%d.png" % count), image)               success,image = vidcap.read()      print('Read a new frame: ', success)       count += 1效果很好,我希望处理所有帧,所以我写了def rm_green(pathOut):       for f in os.listdir(pathOut):           if f[-3:] == "png":                     name, ext = os.path.splitext(f)            im = Image.open(f)            im = im.convert('RGBA')            .            .            . ## and some other line of code blah blah然后我终于调用了这个函数:extract_frame('vid.mp4', 'test1')pathIn='./test1/'rm_green(pathIn)从这里开始,函数 extract_frame() 运行良好,它创建了一个名为“test1”的文件夹,其中包含所有帧。但是有一个错误File "C:\Users\DELL\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfileexecfile(filename, namespace)File "C:\Users\DELL\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfileexec(compile(f.read(), filename, 'exec'), namespace)File "C:/Users/DELL/Desktop/Senior/video/bg/use this/extract-remove-green-combinevid.py", line 113, in <module>rm_green(pathIn)File "C:/Users/DELL/Desktop/Senior/video/bg/use this/extract-remove-green-combinevid.py", line 61, in rm_greenim = Image.open(f)FileNotFoundError: [Errno 2] No such file or directory: 'frame0.png'我不知道为什么会发生这种情况,因为文件夹 test1 中有帧。我写路径的方式有什么问题吗?既然它读取了 test1 文件夹中的“frame0.png”,怎么会发生这种情况?或者这个错误与 PIL 库中的 Image.open(f) 相关?代码来自名为 extract-remove-green 的 py 文件。>> 这个 os.listdir() 工作正常吗?
查看完整描述

2 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

我看到您正在尝试f直接使用from 循环变量。但这只是一个文件名,而不是文件的路径。您可能需要os.abspath(f)获取文件的完整路径,然后对其运行所需的操作。


for f in os.listdir(pathOut):

    file_path = os.path.abspath(os.path.join(pathOut, f))

    if f[-3:] == "png":         

        name, ext = os.path.splitext(f)

        im = Image.open(file_path)

        im = im.convert('RGBA')

希望这对你有帮助。谢谢。


查看完整回答
反对 回复 2021-06-22
?
开满天机

TA贡献1786条经验 获得超13个赞

这是一个提示,如何获取文件目录的完整路径:


import path

script_dir = path.dirname(path.abspath(__file__))

然后你可以使用 join 或 concatination 来获取文件或子目录的完整路径:


file_path = script_dir.join("\\the_name_of_file_or_directory") 

# file_path  = script_dir + "\\the_name_of_file_or_directory"


查看完整回答
反对 回复 2021-06-22
  • 2 回答
  • 0 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信