Python使用glob庫批量匹配文件路徑
一、glob 模塊簡介
glob
是 Python 的標(biāo)準(zhǔn)庫之一,無需額外安裝,專門用于文件名的模式匹配搜索。它的名字來源于 Unix shell 命令中的“globbing”,意思是使用通配符進行匹配。
常見應(yīng)用場景包括:
- 批量讀取某個目錄下的圖片、文本、日志等文件
- 在子目錄中遞歸查找特定類型的文件
- 配合
os
或shutil
實現(xiàn)批量文件復(fù)制、刪除、重命名等操作
二、通配符模式基礎(chǔ)
glob
使用與 shell 類似的通配符規(guī)則:
通配符 | 含義 | 示例 |
---|---|---|
* | 匹配任意長度的任意字符 | *.txt 匹配所有 .txt |
? | 匹配任意一個字符 | file?.txt 匹配 file1.txt , fileA.txt |
[] | 匹配指定范圍內(nèi)的任一字符 | file[1-3].txt 匹配 file1.txt , file2.txt , file3.txt |
** | 匹配任意目錄(需開啟遞歸) | **/*.py 匹配任意子目錄中的 .py 文件(需設(shè)置 recursive=True ) |
三、基本用法
3.1 查找當(dāng)前目錄下的所有 .txt 文件
import glob files = glob.glob("*.txt") print(files) # 輸出示例: ['data1.txt', 'report.txt']
3.2 匹配指定路徑中的圖像文件
image_files = glob.glob("images/*.jpg")
3.3 匹配多個后綴名(結(jié)合列表推導(dǎo))
files = glob.glob("data/*.csv") + glob.glob("data/*.xlsx")
四、遞歸查找子目錄文件(**)
從 Python 3.5 開始,glob
支持遞歸模式:
files = glob.glob("**/*.py", recursive=True)
這會在當(dāng)前目錄及其所有子目錄中查找 .py
文件。
默認情況下 ** 不遞歸,必須顯式設(shè)置 recursive=True。
五、與 os.path、pathlib 聯(lián)合使用
5.1 獲取文件名或絕對路徑
import os for file in glob.glob("logs/*.log"): print("文件名:", os.path.basename(file)) print("絕對路徑:", os.path.abspath(file))
5.2 使用 pathlib 更優(yōu)雅地處理路徑
from pathlib import Path files = Path("data").glob("*.txt") for file in files: print(file.name, file.stem, file.suffix)
六、高級使用技巧
6.1 查找以數(shù)字開頭的文件
glob.glob("[0-9]*.txt")
6.2 多級目錄下查找 .png 圖像
glob.glob("*/**/*.png", recursive=True)
6.3 排除某些文件(結(jié)合 fnmatch 或過濾器)
import fnmatch files = [f for f in glob.glob("data/*.csv") if not fnmatch.fnmatch(f, "data/test_*.csv")]
七、實戰(zhàn)案例:批量讀取圖片并處理
import glob from PIL import Image image_paths = glob.glob("images/**/*.jpg", recursive=True) for path in image_paths: img = Image.open(path) print(f"{path}: {img.size}")
八、glob vs os.listdir vs pathlib
特性 | glob | os.listdir | pathlib |
---|---|---|---|
通配符匹配 | 支持 | 不支持,需要手動過濾 | 支持 .glob() |
遞歸搜索 | 支持 (**) | 需手動遞歸遍歷 | rglob() 更簡潔 |
返回類型 | str 列表 | str 列表 | Path 對象生成器 |
使用習(xí)慣 | 類 Unix shell 風(fēng)格 | 簡單、通用 | 面向?qū)ο?、現(xiàn)代化 |
建議在新項目中逐漸遷移至 pathlib
,但 glob
的通配能力仍不可替代。
九、常見問題與誤區(qū)
9.1 glob 不返回文件?
- 檢查路徑是否正確(相對/絕對路徑)
- 注意區(qū)分大小寫(特別是 Linux)
**/*.py
要配合recursive=True
9.2 無法匹配隱藏文件?
glob("*")
默認不會匹配以 .
開頭的文件,需要明確指定:
glob.glob(".*") # 匹配隱藏文件
十、總結(jié)與最佳實踐
glob
是處理文件路徑批量操作的利器- 支持通配符、遞歸、靈活組合
- 可與
os
、pathlib
、PIL
、shutil
等庫組合處理復(fù)雜任務(wù) - 對于大規(guī)模目錄掃描,推薦使用
pathlib.rglob()
更高效
以上就是Python使用glob庫批量匹配文件路徑的詳細內(nèi)容,更多關(guān)于Python glob匹配文件路徑的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用Python將PDF表格提取到文本,CSV和Excel文件中
本文將介紹如何使用簡單的Python代碼從PDF文檔中提取表格數(shù)據(jù)并將其寫入文本、CSV和Excel文件,從而輕松實現(xiàn)PDF表格的自動化提取,有需要的可以參考下2024-11-11使用python創(chuàng)建股票的時間序列可視化分析
這篇文章主要為大家詳細介紹了python創(chuàng)建股票的時間序列可視化分析,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03Python生成器next方法和send方法區(qū)別詳解
這篇文章主要介紹了Python生成器next方法和send方法區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-05-05基于OpenCV和Gradio實現(xiàn)簡單的人臉識別詳解
這篇文章主要為大家詳細介紹了如何基于OpenCV和Gradio實現(xiàn)簡單的人臉識別功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2023-04-04