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

如何在Python中合并文件夹及修改目录树保留文件目录

Python文件夹操作常见问题解决方案

1. 如何合并多个文件夹?

合并文件夹的核心是将多个源文件夹内的所有文件(包括子目录结构)统一迁移到目标文件夹,同时处理子目录创建和重复文件的覆盖/跳过逻辑。以下是一个通用实现:

import os
import shutil

def merge_folders(source_folders, target_folder):
    # 确保目标文件夹存在,不存在则创建
    os.makedirs(target_folder, exist_ok=True)
    
    for src_folder in source_folders:
        # 遍历源文件夹下的所有层级
        for root, dirs, files in os.walk(src_folder):
            # 计算当前目录相对于源文件夹的相对路径,保留子目录结构
            relative_path = os.path.relpath(root, src_folder)
            target_dir = os.path.join(target_folder, relative_path)
            
            # 创建目标子目录
            os.makedirs(target_dir, exist_ok=True)
            
            # 复制每个文件,copy2会保留文件元数据
            for file in files:
                src_file = os.path.join(root, file)
                target_file = os.path.join(target_dir, file)
                shutil.copy2(src_file, target_file)
                print(f"已复制: {src_file} -> {target_file}")

# 使用示例
source_folders = ["C:/User/Desktop/folder1", "C:/User/Desktop/folder2"]
target_folder = "C:/User/Desktop/merged_folder"
merge_folders(source_folders, target_folder)

如果需要跳过已存在的文件,可在复制前添加判断:if not os.path.exists(target_file):。

2. 移除目录树的部分层级并移动文件

针对你给出的路径需求,核心是去掉Desktop后紧跟的随机字符串目录,将后续路径直接挂载到Desktop下。具体实现如下:

import os
import shutil

# 待处理的文件路径列表
file_paths = [
    r"C:\User\Desktop\g1sr56g41f2d3s1gf\Document\A\file1.txt",
    r"C:\User\Desktop\g1sr56g41f2d3s1gf\Document\B\C\file2.txt",
    r"C:\User\Desktop\g1sr56g41f2d3s1gf\file3.txt",
    r"C:\User\Desktop\F2F31DS5FDSF1S2F3DS2F1D23\file4.txt",
    r"C:\User\Desktop\g1sr56g41f2d3s1gf\Document\B\C\file5.txt",
    r"C:\User\Desktop\g1sr56g41f2d3s1gf\Document\D\E\file6.txt"
]

# 基准路径:Desktop的绝对路径
base_path = r"C:\User\Desktop"

for file_path in file_paths:
    # 标准化路径并拆分组件,处理不同系统的分隔符
    path_parts = os.path.normpath(file_path).split(os.sep)
    # 定位Desktop在路径中的位置
    desktop_index = path_parts.index("Desktop")
    # 跳过Desktop后的第一个随机目录,拼接目标路径
    target_parts = path_parts[:desktop_index+1] + path_parts[desktop_index+2:]
    target_path = os.sep.join(target_parts)
    
    # 确保目标文件的父目录存在
    target_dir = os.path.dirname(target_path)
    os.makedirs(target_dir, exist_ok=True)
    
    # 移动文件
    shutil.move(file_path, target_path)
    print(f"已移动: {file_path} -> {target_path}")

这段代码会自动处理子目录的创建,保证移动后的文件结构符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:05:17