Python - 空dirs&在shutil.copytree函数之后的子目录

时间:2013-08-10 18:55:43

标签: python extract pruning ignorelist

这是我正在撰写的计划的一部分。目标是提取所有GPX文件,例如G:\(在命令行使用-e G:\指定)。它将创建一个'Exports'文件夹并转储所有具有匹配扩展名的文件,递归即可。效果很棒,朋友帮我写了!!问题:没有包含GPX文件的dirs的空目录和子目录。

import argparse, shutil, os

def ignore_list(path, files): # This ignore list is specified in the function below.
    ret = []
    for fname in files:
         fullFileName = os.path.normpath(path) + os.sep + fname
         if not os.path.isdir(fullFileName) \
            and not fname.endswith('gpx'):
            ret.append(fname)
         elif os.path.isdir(fullFileName) \ # This isn't doing what it's supposed to.
            and len(os.listdir(fullFileName)) == 0:
            ret.append(fname)
    return ret

def gpxextract(src,dest):    
    shutil.copytree(src,dest,ignore=ignore_list)

在该计划的后期,我们呼吁extractpath()

if args.extractpath:
    path = args.extractpath
    gpxextract(extractpath, 'Exports')

因此,上述提取 确实有效 。但上面的len函数调用旨在防止创建空目录而不是。我知道最好的方法是{<1}}以某种方式导出后,当没有错误时,文件夹仍然存在。

那么我怎样才能成功修剪这个Exports文件夹,这样只有带GPX的dirs会在那里? :)

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您想要删除空文件夹吗?如果是这种情况,您可以执行自下而上的删除文件夹操作 - 对于任何非空的文件夹,操作都将失败。类似的东西:

for root, dirs, files in os.walk('G:/', topdown=true):
    for dn in dirs:
        pth = os.path.join(root, dn)
        try:
            os.rmdir(pth)
        except OSError:
            pass