如何使用Python将指定目录子目录中的图片文件移动至新目录
没问题,这事儿用Python处理起来非常顺畅,我给你写一套实用的代码方案,还特意加上了重名文件处理的逻辑,避免不小心覆盖掉已有的图片:
Python实现批量移动子目录图片到目标目录
核心思路
- 用
os模块遍历源目录下的所有子目录,精准识别图片文件 - 用
shutil模块完成安全的文件移动操作 - 自动处理重名文件,避免覆盖风险
完整代码示例
import os import shutil # 替换成你的源目录和目标目录路径(Windows系统用双反斜杠\\或原始字符串r"路径") source_dir = "path/to/dir" target_dir = "newpath/to/newdir" # 定义需要识别的图片后缀(可根据需求添加/修改,比如.webp) IMAGE_EXTENSIONS = {'.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff'} def move_images(source, target): # 确保目标目录存在,不存在则自动创建 os.makedirs(target, exist_ok=True) # 遍历源目录下的所有层级目录与文件 for root, dirs, files in os.walk(source): # 跳过源目录本身,只处理子目录内的图片(若要包含源目录的图片,删除此判断) if root == source: continue for file in files: # 获取文件后缀并转小写,避免大小写识别遗漏(比如.JPG) file_ext = os.path.splitext(file)[1].lower() if file_ext in IMAGE_EXTENSIONS: source_file = os.path.join(root, file) target_file = os.path.join(target, file) # 处理重名:若目标已存在同名文件,自动添加序号(如photo.jpg→photo_1.jpg) counter = 1 while os.path.exists(target_file): name, ext = os.path.splitext(file) target_file = os.path.join(target, f"{name}_{counter}{ext}") counter += 1 # 执行移动操作 shutil.move(source_file, target_file) print(f"已移动: {source_file} → {target_file}") if __name__ == "__main__": move_images(source_dir, target_dir) print("所有图片移动完成!")
关键细节说明
- 路径替换:务必把
source_dir和target_dir换成你实际的路径,Windows系统注意路径格式 - 图片格式扩展:如果需要识别更多图片类型,直接在
IMAGE_EXTENSIONS集合里添加即可(比如.webp) - 遍历范围调整:如果希望把源目录本身的图片也一起移动,删掉
if root == source: continue这一行 - 重名保护:代码会自动给重复文件名加上递增序号,完全不用担心覆盖已有文件
注意事项
- 建议先备份源文件或用少量文件测试,确保逻辑符合你的需求
- 若子目录内有大量图片,移动过程可能需要一点时间,耐心等待即可
- 确保Python进程有访问源目录和写入目标目录的权限
内容的提问来源于stack exchange,提问作者Mo.be
相关产品推荐
相关产品推荐

