Python 实现 移动指定名称的文件夹,保留原始目录结构
·
Python 实现 移动指定名称的文件夹,保留原始目录结构
flyfish
源目录结构(原始结构)
源文件夹/
├─ 车间A/
│ ├─ 设备A/ ← 会被移动
│ └─ 设备B/ ← 不移动
├─ 车间B/
│ └─ 生产线1/
│ ├─ 设备A/ ← 会被移动
│ └─ 设备B/ ← 不移动
目标目录结构(移动后,严格保留原结构)
目标文件夹/
├─ 车间A/
│ └─ 设备A/
├─ 车间B/
│ └─ 生产线1/
│ └─ 设备A/
逻辑
- 递归遍历源目录所有子文件夹(支持无限层级)
- 精准匹配文件夹名:仅移动 设备A,完全忽略 设备B
- 保留原始层级结构:目标目录会和源目录结构完全一致
- 安全移动:自动创建目标目录结构,处理重复/异常情况
代码
import os
import shutil
def move_specific_folder(source_root: str, target_root: str, target_folder_name: str = "设备A"):
"""
递归遍历源目录,仅移动指定名称的文件夹,保留原始目录结构
:param source_root: 源根文件夹路径(要遍历的顶层目录)
:param target_root: 目标根文件夹路径(移动到的顶层目录)
:param target_folder_name: 要移动的文件夹名称(默认:设备A)
"""
# 校验源目录是否存在
if not os.path.isdir(source_root):
print(f"源目录不存在:{source_root}")
return
# 递归遍历所有文件夹 (root=当前路径, dirs=子文件夹, files=文件)
for root, dirs, files in os.walk(source_root):
# 遍历当前路径下的所有子文件夹
for dir_name in dirs:
# 仅匹配 设备A,跳过 设备B
if dir_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)
# 移动文件夹(如果目标已存在,会抛出异常,这里做安全处理)
if not os.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}")
except Exception as e:
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_DIR 和 TARGET_DIR 换成自己的真实路径(Windows路径前面加 r 避免转义)。
更多推荐



所有评论(0)