1. 程式人生 > >Python基礎學習:glob模組

Python基礎學習:glob模組

資原始碼:Lib/glob.py

    glob模組找出所有的匹配Unix shell的特殊模式的路徑名,但是結果返回的順序不定。沒有波浪號擴充套件被使用,但是*、?和用[]包裹範圍內的字元會被正確的匹配。這個用法通過os.scandir()和fnmatch.fnmatch()函式的協調使用,並且也不是通過實際呼叫子shell實現。注意:不同於fnmatch.fnmatch(),glob對待檔名是以一個點(.)開頭作為特殊情況。(對於波浪號和shell不同的表達,使用os.path.expanduser()和os.path.expandvars())。

    對於先行匹配,將括號中的元字元包裹起來。例如:’[?]’匹配了字元’?’。

glob. glob(pathname. *, recursive=False)

    返回一個可能空的路徑名列表用於匹配pathname,它必須是一個包含路徑規範的字串。pathname可以是相對名,也可以是絕對名,並且可以包含shell風格的萬用字元。結果中包含了終端的連結(就像在shell中)。

    如果recursive為真,“**”模式將會匹配然和檔案和最少為零的目錄和子目錄。如果跟隨os.sep模式,只有目錄和子目錄會被匹配。

注意:使用“**”模式在最大目錄樹中可能會消耗無法控制的大量時間。

glob. iglob(pathname, *, recursive=False)

    返回一個迭代器,它獲取glob()的相同值,並且實際上不同時儲存它們。

glob. escape(pathname)

    洩露所有的字元('?’、’*’和’[’)。如果你想要匹配一個可能包含特殊字元的任意線性字串,你就會用到它。特殊字元在驅動/UNC共享點上不會被洩露,即:在Windows中escape(‘//?/c:/Quo  vadis?.txt’)返回’//?/c:/Quovadis[?].txt’。

    例如,考慮到一個目錄包含以下檔案:1.gif,2.txt,card.gif和一個子目錄sub中僅包含檔案3.txt。glob()將會生成以下結果。注意到為什麼所有路徑的前導元件被儲存。

>>> import glob

>>> glob.glob('./[0-9].*')

['./1.gif', './2.txt']

>>> glob.glob('*.gif')

['1.gif', 'card.gif']

>>> glob.glob('?.gif')

['1.gif']

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

['2.txt', 'sub/3.txt']

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

['./', './sub/']

    如果一個目錄包含以.開頭的檔案,它們不會被以預設形式匹配。例如,考慮到一個目錄包含card.gif和.card.gif:

>>> import glob
>>> glob.glob('*.gif')
['card.gif']
>>> glob.glob('.c*')
['.card.gif']