获取不符合fnmatch的元素

3
我正在使用递归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个回答

5

如果顺序不重要,使用一个集合(set):

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

1

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接