Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在os.path中使用上的变量格式化文件路径_Python_Filepath_Os.path_Cv2 - Fatal编程技术网

Python 在os.path中使用上的变量格式化文件路径

Python 在os.path中使用上的变量格式化文件路径,python,filepath,os.path,cv2,Python,Filepath,Os.path,Cv2,我已经编写了一个脚本,使用cv2和其他一些模块将视频文件分割成帧。到目前为止,我很高兴粘贴文件路径并运行代码,但现在我希望用户输入文件路径和名称以响应提示。这应该很容易,但我在让os.path为我工作时遇到了很多麻烦。主要的问题是,我希望每个图像文件(即帧)的名称中都有一个数字,显示它在序列中的位置。以下代码是我所拥有的: filepath = input('Please enter the filepath for the clip: ') clip = cv2.VideoCapture(

我已经编写了一个脚本,使用cv2和其他一些模块将视频文件分割成帧。到目前为止,我很高兴粘贴文件路径并运行代码,但现在我希望用户输入文件路径和名称以响应提示。这应该很容易,但我在让os.path为我工作时遇到了很多麻烦。主要的问题是,我希望每个图像文件(即帧)的名称中都有一个数字,显示它在序列中的位置。以下代码是我所拥有的:

filepath = input('Please enter the filepath for the clip: ') 

clip = cv2.VideoCapture(filepath)

#### This code splits the clip into scenes

filepath1 = input('Please enter the filepath for where the frames should be saved: ') 

name = input('Please enter the name of the clip: ') 

ret, frame = clip.read()
count = 0
ret == True
while ret:
    ret, frame = clip.read()
    cv2.imwrite((os.path.join(filepath1,name, '(%d)','.png') % count, frame))
    count += 1
但是,会产生以下错误:

cv2.imwrite((os.path.join(filepath1,name, '(%d)','.png') % count, frame))
    TypeError: Required argument 'img' (pos 2) not found
在os.path.join命令的括号中包含
%count,frame
变量会产生不同的错误:

TypeError: not all arguments converted during string formatting

它应该做的是将大量名为
name(x)
的.png文件写入一个类似
MYcomputer/mydesktop/myfolder/
的位置。我不确定这里出了什么问题-感谢您的帮助

括号的位置以及
join
的用法都是错误的

cv2.imwrite((os.path.join(filepath1,name, '(%d)','.png') % count, frame))
应纠正这一点:

cv2.imwrite(os.path.join(filepath1, name+'(%d).png'%count), frame)
为了进一步改进代码,我建议

fname = "{name}({count}).png".format(name=name, count=count)
cv2.imwrite(os.path.join(filepath1, fname), frame)
下面简要介绍一下
os.path.join
:它将所有参数与操作系统的路径分隔符连接起来(在基于Unix的系统上为“/”,在Windows上为“\”)。因此,原始代码将产生以下字符串:

filepath1 = "some_dir"
name = "some_name"
count = 10
print(os.path.join(filepath1, name, '(%d)' % count,'.png'))
>>> "some_dir/some_name/10/.png"

括号的位置以及
join
的用法都是错误的

cv2.imwrite((os.path.join(filepath1,name, '(%d)','.png') % count, frame))
应纠正这一点:

cv2.imwrite(os.path.join(filepath1, name+'(%d).png'%count), frame)
为了进一步改进代码,我建议

fname = "{name}({count}).png".format(name=name, count=count)
cv2.imwrite(os.path.join(filepath1, fname), frame)
下面简要介绍一下
os.path.join
:它将所有参数与操作系统的路径分隔符连接起来(在基于Unix的系统上为“/”,在Windows上为“\”)。因此,原始代码将产生以下字符串:

filepath1 = "some_dir"
name = "some_name"
count = 10
print(os.path.join(filepath1, name, '(%d)' % count,'.png'))
>>> "some_dir/some_name/10/.png"

谢谢你为我清理了这么多!但是,我现在得到了一个不同的错误:
cv2.imwrite((os.path.join(filepath1,name+'(%d).png'%count],frame))TypeError:找不到必需的参数'img'(pos 2)
对此有什么想法吗?正如我所说的,检查您的“(“and”)”位置;)imwrite需要文件路径作为第一个参数,然后是图像。传递一个包含文件路径和图像的元组。所以双“(“and-”)太多了。啊,是的,我明白了。非常感谢你的修复和教育!现在很好,谢谢你帮我清理了这么多!但是,我现在得到了一个不同的错误:
cv2.imwrite((os.path.join(filepath1,name+'(%d).png'%count],frame))TypeError:找不到必需的参数'img'(pos 2)
对此有什么想法吗?正如我所说的,检查您的“(“and”)”位置;)imwrite需要文件路径作为第一个参数,然后是图像。传递一个包含文件路径和图像的元组。所以双“(“and-”)太多了。啊,是的,我明白了。非常感谢你的修复和教育!现在一切正常