我正在尝试将目录及其所有内容复制到已经存在的路径中。问题是,在 os 模块和 shutil 模块之间,似乎没有办法做到这一点。该shutil.copytree()
函数期望目标路径事先不存在。
我正在寻找的确切结果是将整个文件夹结构复制到另一个之上,在找到的任何重复项上静默覆盖。在我开始编写自己的函数来执行此操作之前,我想我会问是否有人知道这样做的现有食谱或片段。
我正在尝试将目录及其所有内容复制到已经存在的路径中。问题是,在 os 模块和 shutil 模块之间,似乎没有办法做到这一点。该shutil.copytree()
函数期望目标路径事先不存在。
我正在寻找的确切结果是将整个文件夹结构复制到另一个之上,在找到的任何重复项上静默覆盖。在我开始编写自己的函数来执行此操作之前,我想我会问是否有人知道这样做的现有食谱或片段。
distutils.dir_util.copy_tree
做你想做的事。
将整个目录树 src 复制到新位置 dst。src 和 dst 都必须是目录名。如果 src 不是目录,则引发 DistutilsFileError。如果 dst 不存在,则使用 mkpath() 创建它。复制的最终结果是src中的每个文件都复制到dst,src下的目录递归复制到dst。使用它们的输出名称返回已复制或可能已复制的文件列表。返回值不受 update 或 dry_run 影响:它只是 src 下所有文件的列表,名称更改为 dst 下。
(以上网址中的更多文档)
为什么不使用自己实现它os.walk
?
对于像这样的高级文件操作,请使用shutil模块,在您的情况下使用 copytree 函数。我认为这比“滥用” distutils 更干净。
更新::忘记答案,我忽略了OP确实尝试了shutil。
您是否收到“无法在目录已存在时创建目录”的错误消息?我不确定这有多傻,但我所做的只是在 copytree 模块中插入一行:我改变了:
def copytree(src, dst, symlinks=False):
names = os.listdir(src)
os.makedirs(dst)
进入:
def copytree(src, dst, symlinks=False):
names = os.listdir(src)
if (os.path.isdir(dst)==False):
os.makedirs(dst)
我想我做了一些更愚蠢的事情。如果是这样,有人可以指出我吗?抱歉,我对 python 很陌生:P