Python使用shutil.copytree复制文件夹触发FileExistsError如何解决
问题根因
shutil.copytree 方法的默认逻辑是目标路径必须完全不存在,只要你指定的目标文件夹folder_2已经存在(哪怕是空文件夹、之前跑代码中途失败残留的目录),调用时就会直接抛出FileExistsError,和源文件夹里的文件内容无关,所以更换测试文件依然会复现问题。
排查步骤
先打开代码里指定的桌面路径C:\Users\rapid\OneDrive\Desktop,检查是否已经存在名为folder_2的文件夹,绝大多数场景下都是这个残留目录导致的报错。
报错参考截图:
修复方案
根据你使用的Python版本选择对应方案即可:
- Python 3.8及以上版本:直接给
copytree传入dirs_exist_ok=True参数,允许目标目录已存在,执行时会将源目录内容合并覆盖到目标目录中,修改后代码如下:
import shutil from pathlib import Path p = Path(r"C:\Users\rapid\OneDrive\Desktop") shutil.copytree(p/"folder_1", p/"folder_2", dirs_exist_ok=True)
- Python 3.8以下版本(无
dirs_exist_ok参数):复制前先判断目标路径是否存在,存在则先递归删除目标目录,再执行复制操作:
import shutil from pathlib import Path p = Path(r"C:\Users\rapid\OneDrive\Desktop") target_dir = p / "folder_2" if target_dir.exists(): shutil.rmtree(target_dir) shutil.copytree(p/"folder_1", target_dir)
注意:如果目标目录里有你需要保留的文件,不要直接用
rmtree删除,建议手动清理目标目录后再执行复制,或者自己实现文件级别的增量复制逻辑,避免误删数据。
内容的提问来源于stack exchange,提问作者fierylion
相关产品推荐
相关产品推荐

