3

我正在使用递归全局查找文件并将其从驱动器复制到另一个驱动器

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

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

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

4

2 回答 2

5

如果顺序无关紧要,请使用一组:

goodfiles = fnmatch.filter(files, pattern)
badfiles = set(files).difference(goodfiles)
于 2011-12-27T13:46:20.840 回答
1

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

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

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

于 2011-12-27T13:52:38.600 回答