功能描述:glob模塊可使用Unix shell風格的通配符匹配符合特定格式的文件和文件夾,跟windows的文件搜索功能差很少。glob模塊並不是調用一個子shell實現搜索功能,而是在內部調用了os.listdir()和fnmatch.fnmatch()。html
glob模塊共包含如下3個函數:python
glob(pathname, recursive=False)
第一個參數pathname爲須要匹配的字符串。(該參數應儘可能加上r前綴,以避免發生沒必要要的錯誤)
第二個參數表明遞歸調用,與特殊通配符「**」一同使用,默認爲False。
該函數返回一個符合條件的路徑的字符串列表,若是使用的是Windows系統,路徑上的「\」符號會自動加上轉義符號變爲「\\」(方便使用)。
在3.5版本以後,glob函數支持一個特殊的通配符「**」,該通配符能夠匹配指定路徑裏全部文件和目錄,包括子目錄裏的全部文件和目錄。至關於遞歸地調用了這個函數。使用這個通配符必須加上recursive=True參數。
(在有複雜目錄結構的狀況下使用該通配符可能會致使性能降低,拖累整個程序的運行,需謹慎使用!)正則表達式
iglob(pathname, recursive=False)
參數與glob()一致。
返回一個迭代器,該迭代器不會同時保存全部匹配到的路徑,遍歷該迭代器的結果與使用相同參數調用glob()的返回結果一致。shell
escape(pathname)
這個函數是在3.4版本以後纔有的,功能是忽略全部通配符。(能夠用於測試某文件是否存在)
(3.5.1版本該函數不能正常運行,升級到3.5.2以後恢復正常)windows
須要注意的地方:函數
glob默認不匹配以點符號(.)開始的文件,若是有這類文件,則須要作特殊處理。性能
假如當前文件夾包含test.txt和.test.txt兩個文件。測試
>>> import glob >>> glob.glob('*.txt') ['test.txt'] >>> glob.glob('.*.txt') ['.test.txt']
glob模塊支持的通配符:spa
通配符 | 功能 |
---|---|
* | 匹配0或多個字符 |
** | 匹配全部文件、目錄、子目錄和子目錄裏的文件(3.5版本新增) |
? | 匹配1個字符,與正則表達式裏的?不一樣 |
[exp] | 匹配指定範圍內的字符,如:[1-9]匹配1至9範圍內的字符 |
[!exp] | 匹配不在指定範圍內的字符 |
總結:雖然glob模塊能夠很輕鬆地匹配特定文件和文件夾,可是僅僅支持少許的通配符,沒辦法像正則表達式同樣匹配更復雜的字符串。使用的時候應當認真考慮使用場景,根據需求針對性地選擇解決方案。code
官方文檔地址:
https://docs.python.org/3.5/library/glob.html#module-glob
感謝內容提供者
以上內容遵循BY-NC-SA協議,歡迎轉載,轉載請註明做者。