如何用shutil.copytree将目录正确复制到指定相对路径
问题原因
shutil.copytree的内置行为是,将源目录内部的所有文件、子目录直接复制到指定的目标路径下,不会自动在目标路径位置创建与源目录同名的层级。
你之前的代码将目标路径指定为当前目录.,因此函数直接把源目录test/f1内部的asdf文件平铺到了当前根目录,没有生成预期的./f1目录层,最终出现文件直接散出的异常结果。
正确实现方法
要达到和shell命令cp -R test/f1/ .完全一致的效果,需要在定义目标路径时,手动拼接需要保留的源目录名,让函数将内容复制到新建的同名目录下:
shutil.copytree("test/f1", "./f1", dirs_exist_ok=True)
通用适配写法
如果不想硬编码目标路径的目录名,可以提取源路径的最后一段名称自动拼接目标路径,适配任意源目录的复制场景:
import os import shutil source_path = "test/f1" # 提取源目录名,拼接到目标根路径 target_path = os.path.join(".", os.path.basename(source_path)) shutil.copytree(source_path, target_path, dirs_exist_ok=True)
执行结果验证
上述代码运行完成后,最终生成的目录结构和预期完全匹配:
./test/f1./test/f1/asdf./test/f2./test/f2/asdf./f1/./f1/asdf
内容的提问来源于stack exchange,提问作者jjcasmar
相关产品推荐
相关产品推荐

