获取与 fnmatch 不匹配的元素
Posted
技术标签:
【中文标题】获取与 fnmatch 不匹配的元素【英文标题】:Get also elements that don't match fnmatch 【发布时间】:2012-01-28 12:57:33 【问题描述】:我正在使用递归 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
工作正常。但我也想访问与过滤器不匹配的元素。
有人可以提供帮助吗?我可以在循环中构建一个正则表达式,但必须有一个更简单的解决方案,对吧?
【问题讨论】:
【参考方案1】:如果顺序无关紧要,请使用集合:
goodfiles = fnmatch.filter(files, pattern)
badfiles = set(files).difference(goodfiles)
【讨论】:
【参考方案2】:os.walk
循环内的另一个循环也可以使用:
goodfiles = []
badfiles = []
for f in files:
if fnmatch.fnmatch(f, pattern):
goodfiles.append(f)
else:
badfiles.append(f)
注意:使用此解决方案,您只需遍历文件列表一次。其实os.path.join
部分可以移到上面的循环中。
【讨论】:
以上是关于获取与 fnmatch 不匹配的元素的主要内容,如果未能解决你的问题,请参考以下文章