获取与fnmatch不匹配的元素

时间:2011-12-27 13:43:58

标签: python glob recursive-datastructures fnmatch

我使用递归的glob来查找驱动器中的文件并将其复制到另一个

def recursive_glob(treeroot, pattern):
   results = []
   for base, dirs, files in os.walk(treeroot):

      goodfiles = fnmatch.filter(files, pattern)
      results.extend(os.path.join(base, f) for f in goodfiles)

return results

工作正常。但我也希望能够访问与过滤器不匹配的元素。

有人能提供一些帮助吗?我可以在循环中构建一个正则表达式,但必须有一个更简单的解决方案,对吧?

提前致谢! 拉斯

2 个答案:

答案 0 :(得分:4)

如果订单无关紧要,请使用套装:

goodfiles = fnmatch.filter(files, pattern)
badfiles = set(files).difference(goodfiles)

答案 1 :(得分:1)

也可以使用os.walk循环内的另一个循环:

goodfiles = []
badfiles = []
for f in files:
  if fnmatch.fnmatch(f, pattern):
    goodfiles.append(f)
  else:
    badfiles.append(f)

注意:使用此解决方案,您只需迭代一次文件列表。实际上,os.path.join部分可以移动到上面的循环中。