我正在尝试使用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\
顺便说一句,我想我可以使用walk
或glob
自行编写副本,但我认为shutil
可以直接使用。
答案 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>