2015-10-20 79 views
0
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

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之类的东西。
+0

这是美的事情,谢谢。 –

+0

是的。正则表达式很棒,如果你正确使用它们。我很高兴你喜欢它。 –