Python:递归复制文件夹内容



我想递归地复制文件夹的内容,而不复制已经存在的文件。此外,目标文件夹已存在并包含文件。我尝试使用shutils.copytree(source_folder,destination_folder),但它不能满足我的要求。

我希望它能这样工作:

之前:

  • 源文件夹
    • 子文件夹1
      • foo
      • 酒吧
    • 子文件夹2

  • destination_folder
    • folder_that_was_already_there
      • 文件2.jpeg
    • some_file.txt
    • 子文件夹1
      • foo

之后:

  • destination_folder
    • folder_that_was_already_there
      • 文件2.jpeg
    • some_file.txt
    • 子文件夹1
      • foo
      • 酒吧
    • 子文件夹2

我在tdelaney的帮助下找到了答案:
source_folder是指向源的路径,destination_folder则是指向目标的路径。

import os
import shutil
def copyrecursively(source_folder, destination_folder):
for root, dirs, files in os.walk(source_folder):
    for item in files:
        src_path = os.path.join(root, item)
        dst_path = os.path.join(destination_folder, src_path.replace(source_folder, ""))
        if os.path.exists(dst_path):
            if os.stat(src_path).st_mtime > os.stat(dst_path).st_mtime:
                shutil.copy2(src_path, dst_path)
        else:
            shutil.copy2(src_path, dst_path)
    for item in dirs:
        src_path = os.path.join(root, item)
        dst_path = os.path.join(destination_folder, src_path.replace(source_folder, ""))
        if not os.path.exists(dst_path):
            os.mkdir(dst_path)

您看过distutils.dir_util.copy_tree()吗?update参数默认为0,但您似乎想要1,只有在目标位置不存在文件或文件较旧时才会复制。我看不出你的问题中有任何copy_tree()不会涵盖的要求。

相关内容

  • 没有找到相关文章

最新更新