Python 中非递归的 shutil.copytree
我刚开始学习使用Python,想为一些文件创建一个新的文件夹结构。我正在使用os、shutil和copytree来完成以下操作:
原始文件夹结构:
top_folder/
batch1/
1.tif
1.xml
2.tif
2.xml
hello.tif
hello.xml
batch2/
purple.tif
purple.xml
red.tif
red.xml
结果文件夹结构:
top_folder/
batch1/
1/
1.tif
1.xml
2/
2.tif
2.xml
hello/
hello.tif
hello.xml
batch2/
purple/
purple.tif
purple.xml
red/
red.tif
red.xml
我的问题是:我该如何使用copytree,只复制前两层文件夹,然后让copytree停止,接下来我再用自己的代码来处理批量文件夹内的其他文件夹结构?
这是我的代码:
import os, shutil, errno
def copy(src, dest):
try:
shutil.copytree(src, dest)
except OSError as e:
if e.errno == errno.ENOTDIR:
#code here to transform folders
else:
break
else:
print('Directory not copied. Error: %s' % e)
1 个回答
0
你可以使用 copytree
这个函数里的 ignore
参数来解决这个问题。简单来说,你可以用它来设置一个 glob
模式,这个模式可以包含你想要复制的所有内容,除了那些你不想复制的文件或文件夹。这样一来,其他的内容就会被匹配到,从而被忽略掉。你还可以创建一个自定义的 ignore
函数,让它按照你想要的方式工作。
想了解更多细节,可以查看这里,包括示例代码: https://docs.python.org/2/library/shutil.html#copytree-example