嗨,我正在努力使用一些python代码来将文件夹中的特定文件复制到另一个文件夹中,同时保持目录结构。在
我在学习,所以这段代码是用我找到的各种代码片段组合在一起的,我找不到任何与我的环境完全匹配的代码,而且我对python的理解还不足以理解我哪里出错了def filtered_copy(src_dir, dest_dir, filter):
print 'Copying files named ' + filter + ' in ' + src_dir + ' to ' + dest_dir
ignore_func = lambda d, files: [f for f in files if isfile(join(d, f)) and f != filter]
if os.path.exists(dest_dir):
print 'deleting existing data'
shutil.rmtree(dest_dir)
copytree(src_dir, dest_dir, ignore=ignore_func)
像这样执行这个代码
^{pr2}$
不跨我想要的文件进行复制,但不跨父文件夹(即src_dir)进行复制,因此我尝试实现的结果是:
c:\foldertocopyto\foldertosearch\设置.xml在
***编辑-为了澄清这是一个将在多个操作系统上使用的脚本
所以如果文件夹结构更复杂
父文件夹
-子文件夹
--子文件夹
----子子文件夹
------设置.xml在
我就跑了filtered_copy(subsubsubfolder, foldertocopyto, 'settings.xml')
我希望新的文件夹结构
foldertocopyto(此文件夹上方可能有多个父文件夹)
--子子文件夹
----设置.xml在
换言之,我在其中搜索特定文件的文件夹也应被复制,如果该文件夹已经存在,则应在复制文件夹和文件之前将其删除
我以为copytree()会完成这一部分,但显然不是!在
***编辑结束
***最新代码更改
这是可行的,但我确定这是一个冗长的方法,而且它复制空白文件夹,大概是因为copytree()的执行,我更喜欢被搜索的文件夹和过滤的文件。。。在def filtered_copy(src_dir, dest_dir, filter):
foldername = os.path.basename(os.path.normpath(src_dir))
print 'Copying files named ' + filter + ' in ' + src_dir + ' to ' + dest_dir + '/' + foldername
ignore_func = lambda d, files: [f for f in files if isfile(join(d, f)) and f != filter]
if os.path.exists(dest_dir + '/' + foldername):
print 'deleting existing data'
shutil.rmtree(dest_dir)
copytree(src_dir, dest_dir + '/' + foldername, ignore=ignore_func)
***最新代码更改结束