0

我曾经尝试使用下面的代码将文件从存储介质导出到我的计算机。有效。在此过程中,我必须更改它,因为它不仅仅是递归地抓取具有我想要的扩展名的文件,而是抓取源头的所有文件。

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

4

1 回答 1

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

于 2013-08-10T04:47:55.953 回答