当我试图在os.listdir()中给出windows目录路径时,它给出了错误。我的代码片段:
with os.listdir('C:\Users\Hp\Desktop\video') as entries:我知道python接受'\‘作为转义序列,但我在windows上找不到任何替代序列。给出的错误是:
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX我已经尝试了下面的解决方案,但它给了我一些其他错误:
AttributeError: __enter__我的代码有什么问题吗:
import os
import moviepy.editor as mp
#location = os.path.join("C:", "Users", "Hp", "Desktop", "video")
with os.listdir("C:\\Users\\Hp\\Desktop\\video") as entries:
for entry in entries:
if(".py" or ".png") not in entry:
video = mp.VideoFileClip("entry.name")
logo = (mp.ImageClip("logo.png")
.set_duration(video.duration)
.resize(height=50) # if you need to resize...
.margin(right=8, top=8, opacity=0) # (optional) logo-border padding
.set_pos(("right","top")))
final = mp.CompositeVideoClip([video, logo])
final.write_videofile('o' + "entry.name")发布于 2020-04-19 16:20:12
或者使用忽略反斜杠作为转义字符的原始字符串
with os.listdir(r'C:\Users\Hp\Desktop\video') as entries:或者使用文字反斜杠(转义反斜杠)
with os.listdir('C:\\Users\\Hp\\Desktop\\video') as entries:或者只使用正斜杠。它们在Windows中到处都能工作。
with os.listdir('C:/Users/Hp/Desktop/video') as entries:发布于 2020-04-19 16:37:06
@Adam Smith的答案是正确的。但我想指出一个错误。os.listdir不返回上下文管理器(只是一个普通的列表),所以将它与with关键字一起使用是无用的。正常调用函数。
entries = os.listdir('C:\Users\Hp\Desktop\video')而且你不会得到AttributeError: __enter__错误。
with关键字是一种在block之前调用obj.__enter__(),在block之后调用obj.__exit__()的自动方法。如果对象(这里是从os.listdir返回的列表)没有这些方法,您将得到一个错误。
发布于 2020-04-19 17:24:16
import os
import moviepy.editor as mp
path="C:\\Users\\Hp\\Desktop\\video"
entries=os.listdir(path)
for entry in entries:
if(".py" or ".png") not in entry:
video = mp.VideoFileClip("entry.name")
logo = (mp.ImageClip("logo.png")
.set_duration(video.duration)
.resize(height=50) # if you need to resize...
.margin(right=8, top=8, opacity=0) # (optional) logo-border padding
.set_pos(("right","top")))
final = mp.CompositeVideoClip([video, logo])
final.write_videofile('o' + "entry.name")https://stackoverflow.com/questions/61301410
复制相似问题