当前位置: 首页 > news >正文

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避免转义)。

http://www.jsqmd.com/news/1128628/

相关文章:

  • 接口测试全流程解析:从核心原理到Postman、JMeter、Apifox实战
  • Android 高级工程师面试:Java 多线程与并发 近1年高频追问 22 题
  • 九识智能牵手支付宝,亿级流量为无人配送注入新动力
  • GetQzonehistory:如何一键完整导出QQ空间说说并永久保存青春回忆
  • 2026年AI生图工具实测:Midjourney、可灵、即梦谁更强?
  • Python sort函数参数藏大招!用错它,你的代码直接废了
  • Claude Code auto mode 管理 subagents 的三道安全闸门
  • 鸿蒙物理 108 篇 第六十六篇 土气中和承载定则
  • AI Agent Skills 筛选与落地:从信息过载到高效生产力构建指南
  • 终极Windows系统优化神器:五分钟让你的电脑焕然一新
  • 小小五子棋
  • PyTorch LSTM 时间序列预测实战:NASA IGBT 老化数据预测,Test Loss 降至 0.004
  • Harness Engineering:构建可靠AI应用的系统工程方法实战
  • 3分钟解除Cursor试用限制:新手友好的完整解决方案指南
  • 从PCF到Xenium:空间蛋白组与空间转录组如何互补解析GBM组织生态
  • Protobuf的介绍及使用
  • 【信息科学与工程学】【制造工程】第八十七篇 制造工程中的热学01
  • 私有化 AI 智能体 OpenClaw 2.7.5 升级 2.7.9 完整安装排错手册
  • 抖店一件代发怎么做?抖掌柜一键下单保姆级实操教程
  • 锐捷ACL单向TCP互通组网-使用TCP三次握手SYN包置位为1实现
  • Android 高级工程师面试:JVM 内存与 GC 近1年高频追问 22 题
  • 神经肿瘤免疫研究如何设计空间蛋白组课题?从Cell案例看PCF80应用
  • ComfyUI IPAdapter Plus终极指南:多模态控制与AI图像生成技术深度解析
  • Auto mode 的回退机制,Claude Code 为什么会从自动执行退回人工确认
  • 【每天认识一个国家 | 摩洛哥】
  • VS1053B的非阻塞式播放
  • Fate/Grand Automata:终极Android自动化工具,告别FGO重复刷本
  • 鸿蒙物理 108 篇 第六十八篇 五行反向相克机理
  • Power BI Report Builder实战指南:快速生成合规分页报表
  • leecodecode【面试150】【2026.7.2打卡-java版本】