2017-05-27 66 views
1

我想将一些文件夹和文件从路径复制到另一个路径。例如,我想将其中包含其他一些子文件夹和一些文件的文件夹(称为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

使用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) 
+0

这种回答套件在评论中。 – Gahan

+0

@Gahan编辑。谢谢你的建议。 – frankyjuang

+0

这是一个完整的答案,帮助我这么做。谢谢@frankyjuang – Stateless

相关问题