我在运行此测试程序时创建以下错误。
import shutil
src=r"G:\aaa"
dst=r"F:\zzz"
shutil.copytree(src,dst, symlinks=False, ignore=None)
FileExistsError:[WinError 183]当该文件已存在时无法创建文件:
但是F:\ zzz的文件夹是空的!!!
答案 0 :(得分:1)
“当该文件已存在时无法创建文件”是一个令人困惑的通用Windows消息,因为它对于目录或常规文件是相同的。 (Windows不是非常有用的错误消息,你必须使用它)
来自shutil.copytree
的在线帮助:
>>> help(shutil.copytree)
模块shutil中的函数copytree的帮助:
copytree(src,dst,symlinks = False,ignore = None,copy_function =,ignore_dangling_symlinks = False)
递归复制目录树。
目标目录必须不存在。
所以第一次它可能有效,但有时你需要执行
shutil.rmtree(dst)
在复制树之前删除目标目录(请注意,Windows使用权限很烦,而且具有只读属性的文件可以阻塞shutil.rmtree
,我个人将代码复制到自定义版本中(你'我鼓励在在线帮助中这样做,以便在删除常规文件之前添加os.chmod(path,0o777)
。
答案 1 :(得分:1)
shutil.copytree(src,dst,symlinks = False,ignore = None,copy_function = copy2,ignore_dangling_symlinks = False,dirs_exist_ok = False)
dirs_exist_ok 指示是否在dst或任何丢失的父目录已经存在的情况下引发异常。
Python 3.8 现在支持dirs_exist_ok参数。这样就不会再出现该错误,并且在目标文件夹已经存在的情况下将其覆盖。
因此您需要使用:
shutil.copytree(src, dst, dirs_exist_ok=True)