Python脚本遍历目录提取视频文件时遇文件夹识别问题求助
解决Python视频整理脚本的文件夹识别与多格式匹配问题
问题根源
你的脚本崩溃是因为os.listdir()会返回目标路径下的所有文件和文件夹,但你直接对每个结果执行os.chdir()——文件不是目录,自然会报错。
关键修复与优化
- 识别文件夹:用
os.path.isdir()判断路径是否为合法目录,只对文件夹执行进入操作 - 多格式匹配:把单一的
.mp4换成包含所有目标格式的元组,endswith()支持直接传入元组实现多后缀匹配 - 路径拼接优化:用
os.path.join()替代硬编码的\\,适配Windows/Linux/macOS等不同系统 - 避免目录混乱:操作文件时及时切回原目录,防止后续路径定位错误
优化后的完整代码
import os import shutil def pullout(): # 定义需要匹配的视频格式元组 video_extensions = ('.mp4', '.wmv', '.flv', '.avi') # 记录当前工作目录(用户输入的目标路径) root_dir = os.getcwd() for item in os.listdir(root_dir): item_full_path = os.path.join(root_dir, item) # 仅处理文件夹,跳过文件 if os.path.isdir(item_full_path): os.chdir(item_full_path) # 遍历子文件夹内的所有文件 for file in os.listdir(): # 匹配目标视频格式(加lower兼容大写后缀) if file.lower().endswith(video_extensions): target_path = os.path.join(root_dir, file) shutil.move(file, target_path) # 切回根目录,避免后续路径混乱 os.chdir(root_dir) filepath = input("Enter file path\n") os.chdir(filepath) pullout()
额外说明
- 加
.lower()是为了匹配.MP4、.WMV这类大写后缀的文件,不需要可以直接去掉 - 如果目标目录已有同名文件,
shutil.move()在Windows会直接覆盖,Linux/macOS会报错,可根据需求添加重命名逻辑
内容的提问来源于stack exchange,提问作者lmgesus
相关产品推荐
相关产品推荐

