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

如何用Python从含30万文件夹的目录复制指定多文件夹?

批量复制指定文件夹到目标路径的解决方案

原代码存在的问题

  • 目标路径参数错误:shutil.copytree的第二个参数需要是目标文件夹的完整路径,而非父目录。原代码直接传入桌面路径,会导致复制逻辑混乱,触发报错。
  • 重复文件夹未处理:dir_list包含重复的17145,重复复制会因目标文件夹已存在而失败。
  • 大目录性能浪费:os.listdir(base_path)在30万个文件夹的目录下会极慢,完全没必要遍历整个目录,直接检查指定文件夹是否存在即可。
  • 路径写法易出错:网络路径用转义字符写法容易出错,改用原始字符串更直观。

修正后的代码

import shutil
import os

# 用原始字符串处理网络路径,避免转义问题
base_path = r'\\10.52.16.9\Buildings'
# 对指定文件夹列表去重,避免重复操作
dir_list = list(set(['17145','17145','17169','17172','17174']))
# 目标父目录
dest_root = r'C:\Users\user\Desktop'

for dir_name in dir_list:
    source_dir = os.path.join(base_path, dir_name)
    # 直接检查源文件夹是否存在,无需遍历整个大目录
    if os.path.isdir(source_dir):
        # 构造目标文件夹的完整路径(在桌面下创建同名文件夹)
        dest_dir = os.path.join(dest_root, dir_name)
        try:
            # Python3.8+支持dirs_exist_ok参数,允许目标文件夹存在时合并/覆盖内容
            shutil.copytree(source_dir, dest_dir, dirs_exist_ok=True)
            print(f"成功复制文件夹: {dir_name}")
        except Exception as e:
            print(f"复制文件夹 {dir_name} 失败: {str(e)}")
    else:
        print(f"源文件夹不存在: {source_dir}")

低版本Python兼容处理

如果你的Python版本低于3.8,没有dirs_exist_ok参数,可以替换复制逻辑为:

if os.path.exists(dest_dir):
    shutil.rmtree(dest_dir)  # 删除已存在的目标文件夹(注意:此操作会彻底删除目标内容)
shutil.copytree(source_dir, dest_dir)

关键注意事项

针对30万文件夹的大目录,绝对不要遍历整个目录列表,直接通过指定文件夹名拼接路径并检查存在性,能大幅提升运行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:30:46