我使用递归的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
工作正常。但我也希望能够访问与过滤器不匹配的元素。
有人能提供一些帮助吗?我可以在循环中构建一个正则表达式,但必须有一个更简单的解决方案,对吧?
提前致谢! 拉斯
答案 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
部分可以移动到上面的循环中。