使用Python中的shutil仅复制目录树中的目录

时间:2016-01-31 18:50:04

标签: python shutil

我正在尝试使用Python中的shutil复制目录树。

我这样做:

shutil.copytree(source,target,False,lambda x,y:[r for r in y if os.path.isfile(r)]);

其中source是源目录的路径,target是不存在的目录的名称,source的副本将在其中发生。

第三个参数表示符号链接的处理。

根据我在documentation中的理解,最后一个参数应该是一个输入两个参数并返回将从副本中排除的文件名列表的函数。第一个输入是当前目录的名称,因为shutil以递归方式传递树,第二个输入是其内容列表。

这就是为什么我输入一个lambda试图返回列表中的文件元素。

但这不起作用。它正在复制一切。

我在哪里感到困惑?

我想做的是,如果我有

source\
  subdir1\
     file11.txt
     file12.txt
  subdir2\
     file21.txt

我想获得

target\
  subdir1\
  subdir2\

顺便说一句,我想我可以使用walkglob自行编写副本,但我认为shutil可以直接使用。

2 个答案:

答案 0 :(得分:3)

这会有任何改变吗?

shutil.copytree(source,target,symlinks=False,ignore=ignore_files);

def ignore_files(folder, files):
    return [f for f in files if not os.path.isdir(os.path.join(folder, f))]

答案 1 :(得分:1)

有趣的是找出来,试试这个:

shutil.copytree(source,target,False,lambda x,y:[r for r in y if os.path.isfile(x+os.sep+r)]);

在阅读this post后,问题似乎是r无法理解isfile,直到您拥有完整路径,我通过添加x+os.sep+r来重建。< / p>