Python - shutil.copytree递归提取没有选择性

时间:2013-08-08 06:35:44

标签: 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.
            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具有我想要的扩展名的文件?

1 个答案:

答案 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函数,但希望导出保持其文件夹结构。