我曾尝试使用下面的代码将文件从存储介质导出到我的计算机。有效。在某个地方,我必须改变它,因为它不是仅仅递归地抓取我想要的扩展文件,而是抓取源头的所有文件。
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文件。但是,当我检查“导出”文件夹时,所有都已转移,而不仅仅是使用该扩展程序。我如何解决这个问题只是为了简单地将它变为shutil.copytree具有我想要的扩展名的文件?
答案 0 :(得分:0)
找到解决方案! Jon Clements告诉我有关创建忽略列表并否定它的信息。 BlueMelon在Dreaming in Code帮助我制作了一个:
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_list)
一起使用。这是一个很好的方法:最初尝试使用lambda函数,但希望导出保持其文件夹结构。