Python使用glob庫批量匹配文件路徑
一、glob 模塊簡介
glob 是 Python 的標準庫之一,無需額外安裝,專門用于文件名的模式匹配搜索。它的名字來源于 Unix shell 命令中的“globbing”,意思是使用通配符進行匹配。
常見應用場景包括:
- 批量讀取某個目錄下的圖片、文本、日志等文件
- 在子目錄中遞歸查找特定類型的文件
- 配合
os或shutil實現(xiàn)批量文件復制、刪除、重命名等操作
二、通配符模式基礎
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 文件(需設置 recursive=True) |
三、基本用法
3.1 查找當前目錄下的所有 .txt 文件
import glob
files = glob.glob("*.txt")
print(files)
# 輸出示例: ['data1.txt', 'report.txt']
3.2 匹配指定路徑中的圖像文件
image_files = glob.glob("images/*.jpg")
3.3 匹配多個后綴名(結(jié)合列表推導)
files = glob.glob("data/*.csv") + glob.glob("data/*.xlsx")
四、遞歸查找子目錄文件(**)
從 Python 3.5 開始,glob 支持遞歸模式:
files = glob.glob("**/*.py", recursive=True)
這會在當前目錄及其所有子目錄中查找 .py 文件。
默認情況下 ** 不遞歸,必須顯式設置 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 對象生成器 |
| 使用習慣 | 類 Unix shell 風格 | 簡單、通用 | 面向?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等庫組合處理復雜任務 - 對于大規(guī)模目錄掃描,推薦使用
pathlib.rglob()更高效
以上就是Python使用glob庫批量匹配文件路徑的詳細內(nèi)容,更多關(guān)于Python glob匹配文件路徑的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python基于DeepSeek大模型的提示詞優(yōu)化方案
以下基于DeepSeek大模型特性及搜索結(jié)果的綜合分析,結(jié)合提示詞設計原則、技術(shù)原理與優(yōu)化策略,提供完整Python代碼案例及詳細解析,需要的朋友可以參考下2025-04-04
在Python下利用OpenCV來旋轉(zhuǎn)圖像的教程
這篇文章主要介紹了在Python下利用OpenCV來旋轉(zhuǎn)圖像的教程,代碼和核心的算法都非常簡單,需要的朋友可以參考下2015-04-04
python實現(xiàn)學生信息管理系統(tǒng)(精簡版)
這篇文章主要為大家詳細介紹了python實現(xiàn)學生信息管理系統(tǒng)的精簡版,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-11-11
python使用for循環(huán)計算0-100的整數(shù)的和方法
今天小編就為大家分享一篇python使用for循環(huán)計算0-100的整數(shù)的和方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-02-02

