python3從零學習-5.4.8、fnmatch — Unix文件名模式匹配

源代碼: Lib/fnmatch.py

       此模塊提供了 Unix shell 風格的通配符,它們 並不 等同於正則表達式(關於後者的文檔參見 re   模塊)。 shell 風格通配符所使用的特殊字符如下:
模式
含義
*
匹配所有
?
匹配任何單個字符
[seq]
匹配 seq 中的任何字符
[!seq]
匹配任何不在 seq 中的字符
        對於字面值匹配,請將原字符用方括號括起來。 例如,'[?]' 將匹配字符 '?'
        注意文件名分隔符 (Unix 上爲 '/'不是 此模塊所特有的。 請參見 glob 模塊瞭解文件名擴展 (glob 使用 filter() 來匹配文件名的各個部分)。 類似地,以一個句點打頭的文件名也不是此模塊所特有的,可以通過 * 和 ? 模式來匹配。
  • fnmatch.fnmatch(filenamepattern)

       檢測 filename 字符串是否匹配 pattern 字符串,返回 True    或 False.
兩個形參都會使用 os.path.normcase()               進行大小寫正規化。 fnmatchcase()            可被用於執行大小寫敏感的比較,無論這是否爲所在操作系統的標準。
這個例子將打印當前目錄下帶有擴展名 .txt 的所有文件名:
import fnmatch
import os

for file in os.listdir('.'):
    if fnmatch.fnmatch(file, '*.txt'):
        print(file)

 

  • fnmatch.fnmatchcase(filenamepattern)

                檢測 filename 是否匹配 pattern,返回 True 或 False;此比較是大小寫敏感的,並且不會應用 os.path.normcase()。
  • fnmatch.filter(namespattern)

                返回 names 列表中匹配 pattern 的子集。 它等價於 [n for n in names if fnmatch(n, pattern)],但其實現更爲高效。
  • fnmatch.translate(pattern)

                返回 shell 風格 pattern 轉換成的正則表達式以便用於 re.match() 
示例:
>>> import fnmatch, re
>>>
>>> regex = fnmatch.translate('*.txt')
>>> regex
'(?s:.*\\.txt)\\Z'
>>> reobj = re.compile(regex)
>>> reobj.match('foobar.txt')
<_sre.SRE_Match object; span=(0, 10), match='foobar.txt'>
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章