通过递归函数将文件夹,子文件夹和文件从路径复制到python中的另一个路径

时间:2017-05-27 14:05:04

标签: python recursion directory shutil

我想将一些文件夹和文件从一个路径复制到另一个路径。例如,我想将文件夹(称为folder1)复制到另一个文件夹(dst),该文件夹中包含一些其他子文件夹和一些文件。在我的程序中,首先,我想检查目标文件夹中是否有名为folder1的文件夹,如果没有,则创建一个具有folder1名称的文件夹,然后将folder1的内容复制到目标。另外,也许我们在目标路径中有folder1,但是有一些folder1的子文件夹不存在于目标中,我们必须使用递归函数。这是我为此目的的递归函数:

def CopyFol_Subfolders(src, src_folder, dst):
    Dir = next(os.walk(src))[1]
    sub_files = ""
    sub_files = next(os.walk(src))[2]
    if not os.path.exists(dst + "/" + src_folder):
        os.makedirs(dst + "/" + src_folder)
        shutil.copy2(src + "/" + src_folder, dst + "/" + src_folder)

    elif os.path.exists(src + "/" + src_folder) and is_exist_file(src+"/"+src_folder,dst+"/"+src_folder,sub_files):
        copy_files(sub_files, src+"/"+src_folder, dst+"/"+src_folder)
    else:
        subfolders = ""
        subfolders = next(os.walk(src + "/" + src_folder+"/"))[1]
        for folder in subfolders:
            CopyFol_Subfolders(src + "/" + src_folder, folder, dst + "/" + src_folder)

copy_files功能会将文件从src +"/"+src_folder复制到dst+"/"+src_folder

我感到困惑,这不起作用。我在shutil.copy2中收到了不同的错误,告诉我x is not a filex is a directory。 可以请一些检查我的递归函数的逻辑,让我知道这是什么问题?

1 个答案:

答案 0 :(得分:1)

使用os.path.isdir代替os.path.exists,以确保它只能是目录而不是文件。 os.path.join比自己连接路径字符串要好。

def CopyFol_Subfolders(src, dst):
    for item in os.listdir(src):
        s = os.path.join(src, item)
        d = os.path.join(dst, item)
        if os.path.isdir(s):
            CopyFol_Subfolders(s, d)
        else:
            shutil.copy2(s, d)