glob --- Unix 風(fēng)格路徑名模式擴(kuò)展?
源代碼: Lib/glob.py
glob 模塊可根據(jù) Unix 終端所用規(guī)則找出所有匹配特定模式的路徑名,但會(huì)按不確定的順序返回結(jié)果。 波浪號(hào)擴(kuò)展不會(huì)生效,但 *, ? 以及表示為 [] 的字符范圍將被正確地匹配。 這是通過配合使用 os.scandir() 和 fnmatch.fnmatch() 函數(shù)來實(shí)現(xiàn)的,而不是通過實(shí)際發(fā)起調(diào)用子終端。 請(qǐng)注意不同于 fnmatch.fnmatch(),glob 會(huì)將以點(diǎn)號(hào) (.) 開頭的文件名作為特殊情況來處理。 (對(duì)于波浪號(hào)和終端變量擴(kuò)展,請(qǐng)使用 os.path.expanduser() 和 os.path.expandvars()。)
對(duì)于字面值匹配,請(qǐng)將原字符用方括號(hào)括起來。 例如,'[?]' 將匹配字符 '?'。
參見
pathlib 模塊提供高級(jí)路徑對(duì)象。
-
glob.glob(pathname, *, recursive=False)? 返回匹配 pathname 的可能為空的路徑名列表,路徑名必須為包含一個(gè)路徑描述的字符串。 pathname 可以是絕對(duì)路徑 (如
/usr/src/Python-1.5/Makefile) 或相對(duì)路徑 (如../../Tools/*/*.gif),并且可包含 shell 風(fēng)格的通配符。 無效的符號(hào)鏈接可以包含在結(jié)果中 (與在 shell 中一樣)。如果 recursive 為真值,則模式 "
**" 將匹配目錄中的任何文件以及零個(gè)或多個(gè)目錄、子目錄和符號(hào)鏈接。 如果模式加了一個(gè)os.sep或os.altsep則將不匹配文件。注解
在一個(gè)較大的目錄樹中使用 "
**" 模式可能會(huì)消耗非常多的時(shí)間。在 3.5 版更改: 支持使用 "
**" 的遞歸 glob.
-
glob.iglob(pathname, *, recursive=False)? 返回一個(gè) iterator,它會(huì)產(chǎn)生與
glob()相同的結(jié)果,但不會(huì)實(shí)際地同時(shí)保存它們。
-
glob.escape(pathname)? 轉(zhuǎn)義所有特殊字符 (
'?','*'和'[')。 這適用于當(dāng)你想要匹配可能帶有特殊字符的任意字符串字面值的情況。 在 drive/UNC 共享點(diǎn)中的特殊字符不會(huì)被轉(zhuǎn)義,例如在 Windows 上escape('//?/c:/Quo vadis?.txt')將返回'//?/c:/Quo vadis[?].txt'。3.4 新版功能.
例如,考慮一個(gè)包含以下內(nèi)容的目錄:文件 1.gif, 2.txt, card.gif 以及一個(gè)子目錄 sub 其中只包含一個(gè)文件 3.txt. glob() 將產(chǎn)生如下結(jié)果。 請(qǐng)注意路徑的任何開頭部分都將被保留。:
>>> 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/']
如果目錄包含以 . 打頭的文件,它們默認(rèn)將不會(huì)被匹配。 例如,考慮一個(gè)包含 card.gif 和 .card.gif 的目錄:
>>> import glob
>>> glob.glob('*.gif')
['card.gif']
>>> glob.glob('.c*')
['.card.gif']
參見
- 模塊
fnmatch Shell 風(fēng)格文件名(而非路徑)擴(kuò)展
