Python 实现 移动指定名称的文件夹,保留原始目录结构

📅 2026/7/5 14:10:55 👁️ 阅读次数 📝 编程学习
Python 实现 移动指定名称的文件夹,保留原始目录结构

Python 实现 移动指定名称的文件夹,保留原始目录结构

flyfish

源目录结构(原始结构)

源文件夹/ ├─ 车间A/ │ ├─ 设备A/ ← 会被移动 │ └─ 设备B/ ← 不移动 ├─ 车间B/ │ └─ 生产线1/ │ ├─ 设备A/ ← 会被移动 │ └─ 设备B/ ← 不移动

目标目录结构(移动后,严格保留原结构)

目标文件夹/ ├─ 车间A/ │ └─ 设备A/ ├─ 车间B/ │ └─ 生产线1/ │ └─ 设备A/

逻辑

  1. 递归遍历源目录所有子文件夹(支持无限层级)
  2. 精准匹配文件夹名:仅移动 设备A,完全忽略 设备B
  3. 保留原始层级结构:目标目录会和源目录结构完全一致
  4. 安全移动:自动创建目标目录结构,处理重复/异常情况

代码

importosimportshutildefmove_specific_folder(source_root:str,target_root:str,target_folder_name:str="设备A"):""" 递归遍历源目录,仅移动指定名称的文件夹,保留原始目录结构 :param source_root: 源根文件夹路径(要遍历的顶层目录) :param target_root: 目标根文件夹路径(移动到的顶层目录) :param target_folder_name: 要移动的文件夹名称(默认:设备A) """# 校验源目录是否存在ifnotos.path.isdir(source_root):print(f"源目录不存在:{source_root}")return# 递归遍历所有文件夹 (root=当前路径, dirs=子文件夹, files=文件)forroot,dirs,filesinos.walk(source_root):# 遍历当前路径下的所有子文件夹fordir_nameindirs:# 仅匹配 设备A,跳过 设备Bifdir_name==target_folder_name:# 源文件夹完整路径src_folder_path=os.path.join(root,dir_name)# 计算【相对路径】(核心:保留原始目录结构)relative_path=os.path.relpath(root,source_root)# 目标文件夹完整路径target_folder_path=os.path.join(target_root,relative_path,dir_name)try:# 自动创建目标目录的父级结构os.makedirs(os.path.dirname(target_folder_path),exist_ok=True)# 移动文件夹(如果目标已存在,会抛出异常,这里做安全处理)ifnotos.path.exists(target_folder_path):shutil.move(src_folder_path,target_folder_path)print(f"移动成功:{src_folder_path}{target_folder_path}")else:print(f"目标已存在,跳过移动:{target_folder_path}")exceptExceptionase:print(f"移动失败{src_folder_path},原因:{str(e)}")if__name__=="__main__":# ====================== 修改这两个路径 ======================SOURCE_DIR=r"D:\源文件夹"# 要遍历的顶层目录TARGET_DIR=r"D:\目标文件夹"# 要移动到的目录# =================================================================print("开始遍历并移动「设备A」文件夹...\n")move_specific_folder(SOURCE_DIR,TARGET_DIR)print("\n执行完成!")

把代码中SOURCE_DIRTARGET_DIR换成自己的真实路径(Windows路径前面加r避免转义)。