[Python模塊學習] glob模塊

glob模塊

功能描述:glob模塊可以使用Unix shell風格的通配符匹配符合特定格式的文件和文件夾,跟windows的文件搜索功能差不多。glob模塊並非調用一個子shell實現搜索功能,而是在內部調用了os.listdir()和fnmatch.fnmatch()。


glob模塊共包含以下3個函數:

  1. glob(pathname, recursive=False)
    第一個參數pathname爲需要匹配的字符串。(該參數應儘量加上r前綴,以免發生不必要的錯誤
    第二個參數代表遞歸調用,與特殊通配符“**”一同使用,默認爲False。
    該函數返回一個符合條件的路徑的字符串列表,如果使用的是Windows系統,路徑上的“\”符號會自動加上轉義符號變爲“\\”(方便使用)。
    在3.5版本之後,glob函數支持一個特殊的通配符“**”,該通配符可以匹配指定路徑裏所有文件和目錄,包括子目錄裏的所有文件和目錄。相當於遞歸地調用了這個函數。使用這個通配符必須加上recursive=True參數。
    在有複雜目錄結構的情況下使用該通配符可能會導致性能下降,拖累整個程序的運行,需謹慎使用!

  2. iglob(pathname, recursive=False)
    參數與glob()一致。
    返回一個迭代器,該迭代器不會同時保存所有匹配到的路徑,遍歷該迭代器的結果與使用相同參數調用glob()的返回結果一致。

  3. escape(pathname)
    這個函數是在3.4版本之後纔有的,功能是忽略所有通配符。(可以用於測試某文件是否存在
    3.5.1版本該函數不能正常運行,升級到3.5.2之後恢復正常


需要注意的地方:

glob默認不匹配以點符號(.)開始的文件,如果有這類文件,則需要做特殊處理。

假如當前文件夾包含test.txt和.test.txt兩個文件。

>>> import glob
>>> glob.glob('*.txt')
['test.txt']
>>> glob.glob('.*.txt')
['.test.txt']

glob模塊支持的通配符:

通配符功能
*匹配0或多個字符
**匹配所有文件、目錄、子目錄和子目錄裏的文件(3.5版本新增)
?匹配1個字符,與正則表達式裏的?不同
[exp]匹配指定範圍內的字符,如:[1-9]匹配1至9範圍內的字符
[!exp]匹配不在指定範圍內的字符

總結:雖然glob模塊可以很輕鬆地匹配特定文件和文件夾,但是僅僅支持少量的通配符,沒辦法像正則表達式一樣匹配更復雜的字符串。使用的時候應當認真考慮使用場景,根據需求針對性地選擇解決方案。


官方文檔地址:
https://docs.python.org/3.5/library/glob.html#module-glob
感謝內容提供者

以上內容遵循BY-NC-SA協議,歡迎轉載,轉載請註明作者。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章