Python-shutil.copytree递归提取不可选
我曾经尝试使用下面的代码将文件从存储介质导出到我的计算机。成功了。在这个过程中的某个地方,我一定对它进行了修改,因为它不是递归地获取带有我想要的扩展名的文件,而是获取源代码处的所有文件Python-shutil.copytree递归提取不可选,python,python-2.7,Python,Python 2.7,我曾经尝试使用下面的代码将文件从存储介质导出到我的计算机。成功了。在这个过程中的某个地方,我一定对它进行了修改,因为它不是递归地获取带有我想要的扩展名的文件,而是获取源代码处的所有文件 def xxxlist(ext, dirname, names): ext = ext.lower() for name in names: if name.lower().endswith('.xxx'): # This is the file type I need.
def xxxlist(ext, dirname, names):
ext = ext.lower()
for name in names:
if name.lower().endswith('.xxx'): # This is the file type I need.
print(os.path.join(dirname, name))
def xxxextract(src,dest):
print 'Executing Extraction (may take a minute)...'
dest_dir = os.path.dirname(dest)
try:
os.makedirs(dest_dir)
except os.error as e:
pass
shutil.copytree(src,dest)
print "Successfully exported..."
os.path.walk(path, xxxlist, '.xxx')
下面是程序中的进一步说明。调用以下函数:
if args.extractpath:
path = args.extractpath
xxxextract(extractpath, 'Exports')
如您所见,它执行提取,然后列出所有我想要的xxx文件。但当我检查“Exports”文件夹时,所有内容都被传输了,不仅仅是扩展名。我如何解决这个问题,只需将其发送到shutil.copytree,并将扩展名设置为我想要的文件?找到了一个解决方案!Jon Clements告诉我创建一个忽略列表并否定它。《代码中的梦想》中的蓝瓜帮我制作了一个:
def ignore_list(path, files):
ret = []
for fname in files:
fullFileName = os.path.normpath(path) + os.sep + fname
if not os.path.isdir(fullFileName) \
and not fname.endswith('zdt'):
ret.append(fname)
return ret
这可用于shutil.copytree(src、dst、ignore=ignore\u list)
。这是一个很好的方法:最初尝试lambda函数,但希望导出保持其文件夹结构