如何修改Python代码在二级目录创建分类文件夹并移动照片与视频文件
问题原因
之前的代码出现无限循环生成冗余文件夹的核心原因是:os.walk默认会递归遍历目标路径下所有层级的子目录,遍历过程中你新创建的Photos、Videos文件夹会被识别为新的待处理子目录,触发重复创建逻辑,最终形成无限嵌套的目录结构。
合并功能的完整实现代码
可以直接用下面的代码同时完成文件夹创建和文件分类移动,从根源避免无限循环问题:
import os import shutil # 配置参数 root_path = "root_path" # 可根据需求扩展支持的后缀格式 photo_suffix = (".jpg", ".jpeg", ".png", ".gif", ".raw") video_suffix = (".mp4", ".mov", ".avi", ".mkv", ".flv") # 第一层:遍历root下的所有一级目录(1st_layer_*) for first_dir in os.listdir(root_path): first_dir_path = os.path.join(root_path, first_dir) # 跳过非目录文件 if not os.path.isdir(first_dir_path): continue # 第二层:遍历一级目录下的所有二级目录(2nd_layer_*) for second_dir in os.listdir(first_dir_path): second_dir_path = os.path.join(first_dir_path, second_dir) if not os.path.isdir(second_dir_path): continue # 创建分类文件夹 photo_dir = os.path.join(second_dir_path, "Photos") video_dir = os.path.join(second_dir_path, "Videos") os.makedirs(photo_dir, exist_ok=True) os.makedirs(video_dir, exist_ok=True) # 遍历二级目录下的所有文件,分类移动 for file_name in os.listdir(second_dir_path): file_path = os.path.join(second_dir_path, file_name) # 跳过子目录(避免处理刚创建的Photos/Videos文件夹) if os.path.isdir(file_path): continue # 移动照片 if file_name.lower().endswith(photo_suffix): shutil.move(file_path, os.path.join(photo_dir, file_name)) # 移动视频 elif file_name.lower().endswith(video_suffix): shutil.move(file_path, os.path.join(video_dir, file_name))
代码说明
- 采用分层遍历的逻辑,只处理固定层级的二级目录,不会遍历到新创建的
Photos/Videos目录,彻底解决无限循环问题 - 路径拼接使用
os.path.join,兼容Windows、macOS、Linux全平台,避免硬编码路径分隔符导致的报错 os.makedirs添加exist_ok=True参数,重复运行不会因为文件夹已存在抛出异常- 后缀匹配增加了
lower()处理,不管文件后缀是大写还是小写都能正常识别 - 支持自定义扩展照片、视频的匹配格式,按需修改后缀元组即可
内容的提问来源于stack exchange,提问作者Max Chung
相关产品推荐
相关产品推荐

