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

如何修改Python文件复制代码以保留原目录结构?

保留原目录结构复制文件的Python解决方案

我帮你调整了代码,解决了保留原目录结构的问题,同时修复了几个小bug,一起来看看:

原代码的问题点

你的代码目前有几个需要修正的地方:

  • 变量名笔误:food_list = fileNames.read().split('\n')里的fileNames应该是foodNames,不然会报未定义错误
  • 路径转义问题:open("C:\dirs.txt")里的\d会被Python当作转义字符处理,导致路径识别错误,需要用双反斜杠或者原始字符串
  • 核心逻辑缺失:没有根据原文件的目录结构在目标文件夹下创建对应的子目录,所以所有文件都直接放到了new_folder的根目录

修改后的完整代码

import os
from shutil import copy

# 用原始字符串定义路径,避免转义问题
food_file = r"C:\food.txt"
new_folder = r"C:\newfolder_for_food\"
dirs = [line.rstrip('\n') for line in open(r"C:\dirs.txt")]

with open(food_file) as foodNames:
    # 读取文件名并过滤空行,避免处理无效的空文件名
    food_list = [name.strip() for name in foodNames.read().split('\n') if name.strip()]

for filename in food_list:
    for source_dir in dirs:
        source_path = os.path.join(source_dir, filename)
        if os.path.isfile(source_path):
            # 提取原路径中除盘符外的相对部分,比如C:\image\fruit\apple.png → image\fruit\apple.png
            drive, relative_path = os.path.splitdrive(source_path)
            # 拼接目标路径,把相对部分加到新文件夹后面
            target_path = os.path.join(new_folder, relative_path.lstrip('\\'))
            # 创建目标目录(自动创建多级目录,已存在则不报错)
            os.makedirs(os.path.dirname(target_path), exist_ok=True)
            # 复制文件到对应的子目录
            copy(source_path, target_path)
            # 找到文件后就停止遍历其他目录,提升效率
            break

print("Copying, Please Standby...")
print("Executed!")

关键修改说明

  • 路径结构保留:用os.path.splitdrive拆分盘符和路径主体,把C:\image\fruit\里的image\fruit\部分提取出来,拼接到new_folder后面,这样就保留了原有的子目录结构
  • 自动创建目录:os.makedirs(..., exist_ok=True)会自动创建所有需要的子目录,不用担心目录不存在的问题
  • 过滤无效内容:添加了对空行的过滤,避免处理food.txt里的空文件名
  • 优化查找逻辑:找到文件后用break跳出内层循环,不用再遍历其他目录,节省时间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:47:07