You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中os.listdir传入Windows目录路径报错及代码问题排查

你的Python代码问题解析与修复方案

咱先一步步拆解你遇到的问题,从报错根源到代码里的隐藏bug,逐个解决:

1. 路径转义引发的SyntaxError

你最初遇到的(unicode error) 'unicodeescape' codec can't decode错误,是因为Python把字符串里的\当成了转义字符。比如\U会被解析成Unicode转义序列,但你的路径里\Users的\U后面没有合法的Unicode编码,所以报错。

解决路径问题有三种靠谱方案,选哪种都可以:

  • 用双反斜杠转义:"C:\\Users\\Hp\\Desktop\\video"(你试过这个,但后面的with语句出了问题)
  • 用原始字符串:在路径前加r,让Python不解析转义字符:r"C:\Users\Hp\Desktop\video"(最推荐,写起来最省心)
  • 用正斜杠:Python跨平台支持正斜杠作为路径分隔符:"C:/Users/Hp/Desktop/video"(简洁又通用)

2. AttributeError: __enter__的核心原因

你用with os.listdir(...) as entries:是错的!因为os.listdir()返回的是一个普通的字符串列表,它不是上下文管理器(没有__enter__和__exit__方法),所以不能用with语句包裹。正确的做法是直接把结果赋值给变量,比如entries = os.listdir(你的路径)。

3. 代码里的其他隐藏bug

除了上面的问题,你的代码还有几个容易忽略的小问题:

  • 判断条件逻辑错误:if(".py" or ".png") not in entry: 这个写法完全不对!它等价于if True not in entry(因为.py是真值),永远会执行后续代码。正确的写法应该是判断文件名是否以.py或.png结尾:if not (entry.endswith(".py") or entry.endswith(".png"))
  • 文件路径拼接错误:你写的mp.VideoFileClip("entry.name")是把字符串entry.name当成了文件名,而不是变量entry的值。而且必须拼接完整路径,否则MoviePy会在脚本当前目录找文件,而不是你指定的video文件夹里。应该用os.path.join(folder_path, entry)来生成完整路径。
  • 输出文件名错误:'o' + "entry.name"同样是把字符串entry.name拼进去了,应该改成'o' + entry,或者同样拼接完整路径避免文件散落在各处。

修复后的完整代码

import os
import moviepy.editor as mp

# 定义目标文件夹路径,用原始字符串最省心
folder_path = r"C:\Users\Hp\Desktop\video"
# 直接获取目录下的文件列表,不用with
entries = os.listdir(folder_path)

for entry in entries:
    # 跳过.py和.png文件
    if not (entry.endswith(".py") or entry.endswith(".png")):
        # 生成完整的视频文件路径
        video_path = os.path.join(folder_path, entry)
        video = mp.VideoFileClip(video_path)
        
        # 处理logo,注意logo.png的路径如果不在video文件夹里,也要写对
        logo = (mp.ImageClip("logo.png")
              .set_duration(video.duration)
              .resize(height=50)
              .margin(right=8, top=8, opacity=0)
              .set_pos(("right","top")))
        
        final = mp.CompositeVideoClip([video, logo])
        # 生成输出文件名,同样可以拼接完整路径
        output_path = os.path.join(folder_path, 'o' + entry)
        final.write_videofile(output_path)

内容的提问来源于stack exchange,提问作者Aditya Tokas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 12:02:29