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

