import os
root = "C:\\temp\\a"
exclude = set(["New folder"])
for current, dirs, files in os.walk(root):
dirs[:] = [d for d in dirs if d not in exclude]
for f in files:
print f
如何确保我还排除"新文件夹"的案例和空格变体? 即
exclude = set([
"New folder",
"New Folder",
"new folder",
"new Folder",
"newfolder"
])
作为排除集的一部分,无需计算出所有可能的变体?这可以插入正则表达式吗?
答案 0 :(得分:1)
Python在re module中实现了全功能的正则表达式。您可以预编译正则表达式并将其与每个目录名称匹配:
import os, re
root = "C:\\temp\\a"
exclude = re.compile('^new\\s*folder$', re.IGNORECASE)
for current, dirs, files in os.walk(root):
dirs[:] = [d for d in dirs if exclude.match(d) is not None]
for f in files:
print f
正则表达式已预编译,因为您多次使用它。它包含以下组件:
^
,$
分别表示字符串的开头和结尾。这是避免部分匹配所必需的,例如a new folder!
。\\s*
表示零或多个任何类型的空格。如果要严格检查空格字符,可以将其替换为*
。e.IGNORECASE
使比较大小写不敏感,因此它匹配所有原始可能性。作为副作用,这也会匹配NeWfOlDeR
。