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

使用shutil.rmtree删除文件夹后执行copytree仍提示目录已存在如何解决?

问题成因与解决方法

问题成因

  1. 核心原因是shutil.copytree()的原生设计限制:该函数的逻辑是创建全新的目标目录,再将源目录的全部内容写入新目录,要求传入的目标路径必须完全不存在。只要目标路径已经是存在的目录(无论目录是否为空),就会直接抛出目标目录已存在的错误,该逻辑和删除后的等待时长没有关联。
  2. 次要可能成因:shutil.rmtree()执行后,原目录未被操作系统完全删除。如果有其他进程占用该目录下的文件或目录句柄(例如资源管理器正打开该目录、杀毒软件正在扫描路径、其他程序正在读写该路径下的文件),即使调用了删除接口,操作系统也会暂存目录实体直到占用释放,导致目录实际仍然存在。

解决方法

方法1(Python 3.8及以上版本最优解)

shutil.copytree()从Python 3.8版本开始新增了dirs_exist_ok参数,设置为True即可允许目标目录存在,直接将源目录内容写入目标目录,自动覆盖同路径文件,修改后代码如下:

shutil.rmtree(ogresource)
print('Importing texture pack')
time.sleep(15)
shutil.copytree(fullpath, directory, dirs_exist_ok=True)
time.sleep(2)

方法2(兼容所有Python版本)

如果使用的Python版本低于3.8,可以在删除原目录后增加存在性校验,确保目标目录完全删除后再执行复制,同时可以替代固定时长的sleep,提升执行效率:

import os
import shutil
import time

shutil.rmtree(ogresource)
print('Importing texture pack')
# 循环校验目标目录是否已删除
while os.path.exists(directory):
    time.sleep(0.5)
shutil.copytree(fullpath, directory)
time.sleep(2)

额外注意

如果频繁出现原目录无法删除的问题,建议检查是否有其他进程占用目标路径,关闭对应窗口或排除对应程序影响即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:51:03