我正在尝试将一个目录及其所有内容复制到已存在的路径中。问题是,在 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。返回已复制或可能已复制的文件列表,使用其输出名称。返回值不受更新或dry_run的影响:它只是src下所有文件的列表,名称更改为在dst下。
(更多文档请参见上述网址)
为什么不使用 os.walk
自己实现呢?
对于像这样的高级文件操作,请使用shutil模块,而在您的情况下使用copytree函数。我认为这比“滥用”distutils更加清晰。
更新::忘记我的回答吧,我忽略了OP确实尝试过shutil。
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