Python 中的 Unix 風格路徑名模式擴充套件 (glob)


很多時候,程式需要遍歷檔案系統中的檔案列表,這些檔案通常具有匹配某種模式的名稱。glob 模組在建立特定目錄中具有特定副檔名或檔名的一部分為特定字串的檔案列表方面非常有用。

glob 模組函式使用的模式匹配機制遵循 UNIX 路徑擴充套件規則。但是,此模組不會擴充套件波浪號 (~) 和 shell 變數。

glob 模組主要有三個函式

glob()

此函式返回與 pathname 引數中給定模式匹配的檔案列表。pathname 可以是絕對路徑或相對路徑。它也可以包含萬用字元,例如 * 和 ?。

此函式的 recursive 引數預設為 False。如果為 True,則會遞迴搜尋當前目錄的子目錄以查詢與給定模式匹配的檔案。

以下程式碼列印當前目錄中所有副檔名為 '.py' 的檔案。

>>> import glob
>>> for file in glob.glob("*.py"):
print (file)

在以下程式碼中,recursive=True 引數還會導致列印子目錄中副檔名為 '.py' 的檔案。

>>> for file in glob.glob("*.py", recursive=True):
print (file)

模式路徑名可以包含萬用字元字元 ?。以下語句列印名稱為三個字母且前兩個字母為 'pp' 的檔案列表。

>>> for file in glob.glob("pp?.py"):
print (file)

以下程式碼列印名稱以數字結尾的檔案。

>>> for file in glob.glob('*[0-9].py')
print (file)

以下語法導致遞迴列印與給定路徑匹配的檔案。

>>> glob.glob('**/*.py', recursive=True)

要遞迴列印當前目錄中的目錄名稱,

>>> glob.glob('tcl/**/', recursive=True)

iglob()

此函式返回一個生成器物件而不是檔案列表。使用 next() 函式,可以按如下所示列印後續檔名。

>>> it=glob.iglob('*.py')
>>> type(it)
<class 'generator'>
>>> while True:
try:
file=next(it)
print (file)
except StopIteration:
break

escape()

此函式轉義給定字元。當需要將包含某些字元的檔案作為名稱的一部分時,這非常有用。以下示例搜尋具有 chars 字串中任何字元的檔案。

>>> chars='[]()#'
>>> for char in chars:
esc='*'+glob.escape(char)+'.py'
for file in (glob.glob(esc)):
print (file)
xyz[.py
pp[].py
pp(.py
pp#.py

更新於:2020年6月25日

470 次瀏覽

啟動您的 職業生涯

完成課程獲得認證

開始
廣告