文件走路与排除和正则表达式

时间:2015-10-20 13:22:23

标签: python-2.7 os.walk

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"
 ])

作为排除集的一部分,无需计算出所有可能的变体?这可以插入正则表达式吗?

1 个答案:

答案 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
  • 之类的内容