2015-10-20 55 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

是的。正則表達式很棒,如果你正確使用它們。我很高興你喜歡它。 –