带排除项和正则表达式的文件遍历
File walk with exclusions and regex
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
如何确保我也排除 "New folder" 的大小写和白色 space 变体
即
exclude = set([
"New folder",
"New Folder",
"new folder",
"new Folder",
"newfolder"
])
无需计算出所有可能的变体作为排除集的一部分?这可以插入正则表达式吗?
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*
表示任何类型的零个或多个 space。如果您想严格检查 space 个字符,可以将其替换为 *
。
- 标志
e.IGNORECASE
使比较不区分大小写,因此它匹配您的所有原始可能性。作为副作用,这也会匹配 NeWfOlDeR
. 之类的东西
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
如何确保我也排除 "New folder" 的大小写和白色 space 变体 即
exclude = set([
"New folder",
"New Folder",
"new folder",
"new Folder",
"newfolder"
])
无需计算出所有可能的变体作为排除集的一部分?这可以插入正则表达式吗?
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*
表示任何类型的零个或多个 space。如果您想严格检查 space 个字符,可以将其替换为*
。- 标志
e.IGNORECASE
使比较不区分大小写,因此它匹配您的所有原始可能性。作为副作用,这也会匹配NeWfOlDeR
. 之类的东西