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

如何用Python将train/LUAD下所有子文件夹的jpg图片移动到train_new/LUAD

问题原因及修复方案

核心问题

  • 重名文件覆盖:不同子文件夹下的jpg图片存在大量同名情况,直接将所有文件复制到同一个目标路径时,后复制的文件会直接覆盖先复制的同名文件,最终仅剩下最后一个被遍历到的子文件夹的图片。
  • 功能接口使用错误:需求为移动图片,但代码中使用shutil.copy仅执行复制操作,原路径文件不会被删除。
  • 无文件类型过滤:代码会将子文件夹下所有类型的文件强制重命名为.jpg格式存入目标路径,会生成大量无效文件。
  • 无目标路径校验:如果目标文件夹train_new/LUAD不存在,代码运行会直接报错。

修复后代码

import os
import shutil

def moveFiles(path, disdir): 
    # 目标文件夹不存在则自动创建
    if not os.path.exists(disdir):
        os.makedirs(disdir, exist_ok=True)
    
    dirlist = os.listdir(path)
    for file_name in dirlist:
        child_path = os.path.join(path, file_name)
        if os.path.isfile(child_path):
            # 仅处理jpg格式文件
            suffix = os.path.splitext(file_name)[1].lower()
            if suffix != '.jpg':
                continue
            # 拼接上层子目录名到文件名,避免重名覆盖
            parent_dir = os.path.basename(path)
            new_file_name = f"{parent_dir}_{file_name}"
            # 移动文件,需保留原文件可换回shutil.copy
            shutil.move(child_path, os.path.join(disdir, new_file_name))
            continue
        moveFiles(child_path, disdir)

if __name__ == '__main__':
    rootimage = '/content/drive/MyDrive/stat841_final_data/train/LUAD'   
    disdir = '/content/drive/MyDrive/stat841_final_data/train_new/LUAD'       

    moveFiles(rootimage, disdir)

修复说明

  • 新增目标路径自动创建逻辑,规避路径不存在的报错
  • 新增文件后缀校验,仅迁移jpg格式图片
  • 将子文件夹名称拼接到新文件名前,彻底解决不同子文件夹下文件重名覆盖的问题
  • 替换shutil.copy为shutil.move符合移动文件的需求,若需保留原路径文件可自行换回shutil.copy

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:06:01