如何在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
相关产品推荐
相关产品推荐

