用 Python 定位特定型別檔案

2022-08-13 13:51:17 字數 3198 閱讀 3449

定位特定檔案

定位特定的檔案,可以使用 fnmatch 以及 glob 這兩個標準庫,我們下面來分別看一下。

1. 使用 fnmatch 標準庫

一般的話我們想要查詢特定型別的檔案,可以通過字串的字首匹配和字尾匹配來查詢,具體例項如下所示:

>>> import

os>>> [txt for txt in os.listdir('

.') if txt.endswith('

.txt')]

['b.txt

', '

a.txt

']

其實大部分的情況下這種用字串匹配的方法來查詢檔案就足夠可以滿足需要,如果有些情況下需要更加靈活一點的字串匹配,就可以使用 fnmatch 庫,這是乙個專門用來進行檔名匹配的庫,支援使用萬用字元來進行文字匹配(比如'*','?'等)。

fnmatch 這個庫很簡單,只有 4 個函式:fnmatch,fnmatchcase,filter,translate:

上面 4 個最常用是它的同名函式 fnmatch ,我的當前目錄下有 4 個檔案,分別是:a.txt,b.txt,c.py,test.py,下面我就用 fnmatch 函式來對當前目錄下的這 4 個檔案進行匹配性測試,具體請看下面**:

>>> import

os>>> import

fnmatch

>>> os.listdir('.'

)['test.py

', '

c.py

', '

b.txt

', '

a.txt']

>>> [txt for txt in os.listdir('

.') if fnmatch.fnmatch(txt, '

*.txt')]

['b.txt

', '

a.txt']

>>> [file for file in os.listdir('

.') if fnmatch.fnmatch(file, '

[a-c]*')]

['c.py

', '

b.txt

', '

a.txt']

>>> [file for file in os.listdir('

.') if fnmatch.fnmatch(file, '

[!a-c]*')]

['test.py

']

fnmatchcase 函式與 fnmatch 函式幾乎一樣,只是在匹配的時候會忽略大小寫字母;filter 函式與 fnmatch 比較類似,區別在於fnmatch 一次只對乙個檔名匹配,而 filter 一次可以對多個檔名進行匹配判斷,下面我們就再來看一下 filter 的用法:

>>> import

os>>> import

fnmatch

>>> file = os.listdir('.'

)>>>file['

test.py

', '

c.py

', '

b.txt

', '

a.txt']

>>> fnmatch.filter(file, '

[a-c]*')

['c.py

', '

b.txt

', '

a.txt']

>>> fnmatch.filter(file, '

[!a-c]*')

['test.py

']

2.使用 glob 定位

我們在上面介紹的獲取特定型別的檔案列表,首先是通過 os.listdir 獲取全部的檔案列表,然後通過字串匹配或者使用 fnmatch 進行檔名模式匹配來定位,習慣了 python 的簡潔優雅,這多出來的一步總覺得**怪怪的,好在我現在知道了 glob。

glob 的作用相當於 os.listdir + fnmatch 的組合,使用 glob 以後,就不需要用 os.listdir 獲取檔案列表,直接通過模式匹配就可以解決了,具體操作如下所示:

>>> import

glob

>>> glob.glob('

*.txt')

['b.txt

', '

a.txt']

>>> glob.glob('

[a-c]*')

['c.py

', '

b.txt

', '

a.txt']

>>> glob.glob('

[!a-c]*')

['test.py

']

可以看到,python 真的非常的靈活,光是定位目錄下特定的檔案型別我就已經介紹了 3 種方式,一般情況下就用字串匹配就可以解決,如果需要更加靈活一點的的,可以使用 fnmatch 和 glob。

遍歷目錄樹

再上一節中我們都是查詢某個目錄下的檔案然後通過匹配去定位自己需要的檔案型別。但是在實際的應用過程中我們更可能遇到的是某個目錄及其子目錄下的所有檔案。比如查詢某個目錄及其子目錄下所有的 txt 檔案等等,對於這類的需求,我們可以使用 os 模組下的「walk」函式。walk 函式遍歷某個目錄及其子目錄,對於每乙個目錄,walk 返回乙個三元組,依次是「當前目錄」,「當前目錄下的子目錄」,「當前目錄下的檔案列表」。

python 提取目錄中特定型別的檔案

python使用 os 和 re 模組提取目錄中特定型別的檔案,這兩個模都是安裝python自帶的,所以不需要安裝。思路 使用os庫lilstdir獲取資料夾中的所有檔名,然後帶上資料夾路徑組合成為完整絕對路徑,然後去判斷該路徑檔案的型別,如果是檔案,使用re庫正則相關函式去篩選出特定字尾的檔案 如...

檔案型別關聯 單例模式 用特定程式開啟指定素材

雙擊素材,用特定的exe開啟。方法 素材型別和exe位置寫入登錄檔中。單例模式 乙個exe不可以啟動兩個 if super initinstance 呼叫基類函式 handle hmutex createmutex null,false,m strmutex 找出當前系統是否已經存在指定程序的例項。...

PHP 查詢某型別檔案包含特定字元

需求 寫了大量的php程式,突然想找回某乙個檔案 含特定關鍵字 翻遍了虛擬目錄裡面的每乙個php檔案都沒有找到,於是寫了個指令碼去幫忙搜尋 例子 filelist array dir e ext php word keyword findword dir,ext,word 功能 遍歷資料夾指定型別檔...