2014-09-01 207 views
1

我使用os.walk()來獲取文件名。我需要做的是創建一個文件名列表匹配以下模式:Python正則表達式匹配文件名。使用os.walk()獲取文件名

如果'*'將匹配所有文件。

如果'h*'將匹配所有以h開頭的文件。

如果'*h'將匹配所有以h結尾的文件。

如果'*h*'將匹配其中包含h的所有文件。

如果[h-w]*將在一套匹配任何一個字符,包括設置否定[^ H-W]

我新的正則表達式,我有if語句創建一個針對此問題的困擾。可能有人向我解釋(可能有代碼示例)如何做到這一點。謝謝。

+0

'*'不是一個有效的正則表達式。也許你想要一個'fnmatch'類型的模式? – 2014-09-01 21:06:46

+0

此外,正則表達式'h *'匹配名爲'h','hh','hhh'等的文件,但不包含其他文件。 **模式**'h *'匹配以'h'開始的文件名。 – 2014-09-01 21:07:50

+0

@AvinashRaj,不 - 這顯然將正則表達式與fnmatch樣式模式混合在一起。 '* h'不是一個有效的正則表達式 - '*'字符必須在其之前有其他東西,因爲它會將先前的標記修改爲0或更多。 – 2014-09-01 21:08:41

回答

1

我試過fnmatch,它的工作完美,非常感謝Charles Duffy。 這是我的代碼:

for dp, dn, filenames in os.walk(path): 
    for ff in filenames: 
     if fnmatch.fnmatch(ff, 'My patterns here'): 
      list.append(os.path.join(dp, ff)) 
+0

你可以在fnmatch.filter(filenames,'[hw] *')]''中使用'matching_files = [os.path.join(root,fn)作爲fn。或用'yield'替換'list.append'。 – jfs 2014-09-02 12:39:42