2014-01-27 18 views
0

我繼承了一些使用os.walk來遍歷文件系統部分的代碼。使用fnmatch.fnmatch(路徑,「*」) - 是否匹配所有內容?

for (dirpath, _, filenames) in os.walk(blahblah): 
    reldir = dirpath[len(base)+1:] 
    if fnmatch(reldir, './lost+found'): 
     continue 

    for path in filenames: 
     if fnmatch.fnmatch(path, "*"): 
      ... 

我茫然地瞭解使用的fnmatch來匹配「*」的角度來看,是有什麼,這將不匹配?

我跑了一些".", "..", ".hidden", "normal.name", "normal"和類似的測試,但似乎沒有被過濾掉。

我在文檔中看不到任何東西,而且我猜這條線是因爲某個原因而添加的,任何人都可以啓發我嗎?

回答

2

是的,它匹配一切。如果跟蹤通過爲fnmatch.fnmatch的源代碼,它歸結爲對圖案的正則表達式匹配

In [4]: fnmatch.translate('*') 
Out[4]: '.*\\Z(?ms)' 

匹配0或更多的字符,隨後是最終的字符串(\Z),具有多行和DOTALL標誌。這將匹配任何字符串。


也許在某些點上線

if fnmatch.fnmatch(path, "*"): 

使用的更復雜的圖案,但後來變成"*"代替省略檢查。但這只是猜測。

在任何情況下,if-condition都可以刪除,因爲它始終爲真。

相關問題