2011-09-24 30 views
1

,所以我有一個os.walk代碼的fnmatch你實現比賽究竟是如何在序列模式的所有字符

search = self.search.get_text() 
top = '/home/bludiescript/tv-shows' 
for dirpath, dirnames, filenames in os.walk(top): 
    for filename in filenames: 
    if fnmatch.fnmatch(filename, search) 
     print os.path.join([dirpath, filename]) 

上python文檔這表明你可以匹配字符的任何序列與[SEQ]模式,但沒有不管我怎麼嘗試實現,它給出了這樣的錯誤或根本沒有結果。

所以這將是正確執行,以匹配搜索汽車的序列,因此會打印出匹配

實現我試圖

if fnmatch.fnmatch(filename, [search]) error i got was typeerror unhasable type : 'list' 
if fnmatch.fnmatch[filename, search] error i got was typeerror fnmatch function is not subscriptable 
if fnmatch.fnmatch([filename, search]) error typeerror fnmatch takes two arguments 1 given 
if fnmatch.fnmatch([filename], search) error typeerror expected string or buffer 
if fnmatch.fnmatch([search], filename) error typeerror expected string or buffer 
if fnmatch.fnmatch(filename, search, [seq]) error nameerror global name seq not defined 

if fnmatch.fnmatch(filename, '[search]') 

沒有錯誤,但並沒有產生一個或多個文件任何結果

搜索值

你好,MKV,快活1,2,3,4,5,6,7,等...

+0

你使用了什麼樣的圖案?你看到什麼錯誤? – SingleNegationElimination

+0

我編輯了這個問題來回答你的問題 – user961559

+1

你能告訴我們你用於搜索的值的具體例子嗎?另外,請編輯問題以使其可讀。 –

回答

6

fnmatch實現Unix shell通配符語法。所以,無論你輸入一個ls命令(例如)將工作:

>>> fnmatch.fnmatch("qxx", "[a-z]xx") 
True 
>>> fnmatch.fnmatch("abc", "a??") 
True 
>>> fnmatch.fnmatch("abcdef", "a*f") 
True 
>>> fnmatch.fnmatch("abcdef", "a*[f-k]") 
True 

請記住,的fnmatch是一個純粹的字符串匹配操作。如果您發現使用不同的模式風格更方便,例如正則表達式,那麼只需使用正則表達式操作來匹配您的文件名即可。

+0

非常感謝你指點我正規表達re.findall是我正在尋找。我還發現它的大小寫敏感,我沒有意識到。 – user961559