fnmatch
--- Unix 文件名模式匹配?
源代碼: Lib/fnmatch.py
此模塊提供了 Unix shell 風(fēng)格的通配符,它們 并不 等同于正則表達(dá)式(關(guān)于后者的文檔參見(jiàn) re
模塊)。 shell 風(fēng)格通配符所使用的特殊字符如下:
模式 |
含意 |
---|---|
|
匹配所有 |
|
匹配任何單個(gè)字符 |
|
匹配 seq 中的任何字符 |
|
匹配任何不在 seq 中的字符 |
對(duì)于字面值匹配,請(qǐng)將原字符用方括號(hào)括起來(lái)。 例如,'[?]'
將匹配字符 '?'
。
注意文件名分隔符 (Unix 上為 '/'
) 不會(huì) 被此模塊特別對(duì)待。 請(qǐng)參見(jiàn) glob
模塊了解文件名擴(kuò)展 (glob
使用 filter()
來(lái)匹配文件名的各個(gè)部分)。 類似地,以一個(gè)句點(diǎn)打頭的文件名也不會(huì)被此模塊特別對(duì)待,可以通過(guò) *
和 ?
模式來(lái)匹配。
Also note that functools.lru_cache()
with the maxsize of 32768 is used to
cache the compiled regex patterns in the following functions: fnmatch()
,
fnmatchcase()
, filter()
.
- fnmatch.fnmatch(filename, pattern)?
檢測(cè) filename 字符串是否匹配 pattern 字符串,返回
True
或False
。 兩個(gè)形參都會(huì)使用os.path.normcase()
進(jìn)行大小寫正規(guī)化。fnmatchcase()
可被用于執(zhí)行大小寫敏感的比較,無(wú)論這是否為所在操作系統(tǒng)的標(biāo)準(zhǔn)。這個(gè)例子將打印當(dāng)前目錄下帶有擴(kuò)展名
.txt
的所有文件名:import fnmatch import os for file in os.listdir('.'): if fnmatch.fnmatch(file, '*.txt'): print(file)
- fnmatch.fnmatchcase(filename, pattern)?
檢測(cè) filename 是否匹配 pattern,返回
True
或False
;此比較是大小寫敏感的,并且不會(huì)應(yīng)用os.path.normcase()
。
- fnmatch.filter(names, pattern)?
基于可迭代對(duì)象 names 中匹配 pattern 的元素構(gòu)造一個(gè)列表。 它等價(jià)于
[n for n in names if fnmatch(n, pattern)]
,但實(shí)現(xiàn)得更有效率。
- fnmatch.translate(pattern)?
返回 shell 風(fēng)格 pattern 轉(zhuǎn)換成的正則表達(dá)式以便用于
re.match()
。示例:
>>> import fnmatch, re >>> >>> regex = fnmatch.translate('*.txt') >>> regex '(?s:.*\\.txt)\\Z' >>> reobj = re.compile(regex) >>> reobj.match('foobar.txt') <re.Match object; span=(0, 10), match='foobar.txt'>
參見(jiàn)
- 模塊
glob
Unix shell 風(fēng)格路徑擴(kuò)展。