Python文件路徑模式匹配glob模塊使用詳解
一、glob 模塊概述
glob
模塊可根據(jù)指定的模式來(lái)查找文件和目錄,它支持使用通配符進(jìn)行模糊匹配。主要通過(guò) glob
和 iglob
兩個(gè)函數(shù)來(lái)實(shí)現(xiàn)文件路徑的模式匹配,能處理簡(jiǎn)單的文件名模式,如 *.txt
可匹配所有擴(kuò)展名為 .txt
的文件。
二、通配符規(guī)則
(一)* 通配符
- 功能:匹配任意數(shù)量(包括零個(gè))的任意字符。
- 示例:
import glob # 匹配當(dāng)前目錄下所有擴(kuò)展名為 .txt 的文件 txt_files = glob.glob('*.txt') for file in txt_files: print(file)
上述代碼中,*.txt
表示匹配當(dāng)前目錄下文件名任意,但擴(kuò)展名為 .txt
的所有文件。
(二)? 通配符
- 功能:匹配單個(gè)任意字符。
- 示例:
import glob # 匹配當(dāng)前目錄下文件名只有一個(gè)字符且擴(kuò)展名為 .py 的文件 single_char_py_files = glob.glob('?.py') for file in single_char_py_files: print(file)
這里,?.py
表示文件名只有一個(gè)字符,擴(kuò)展名為 .py
的文件。
(三)[] 通配符
功能:匹配方括號(hào)內(nèi)指定的任意一個(gè)字符。
示例:
import glob # 匹配當(dāng)前目錄下文件名以 a 或 b 開(kāi)頭且擴(kuò)展名為 .txt 的文件 ab_txt_files = glob.glob('[ab]*.txt') for file in ab_txt_files: print(file)
[ab]*.txt
表示文件名以 a
或 b
開(kāi)頭,擴(kuò)展名為 .txt
的文件。
(四)** 通配符(遞歸匹配)
- 功能:在路徑中使用
**
表示遞歸匹配目錄。在 Python 3.5 及以上版本支持。 - 示例:
import glob # 遞歸匹配當(dāng)前目錄及其子目錄下所有擴(kuò)展名為 .txt 的文件 all_txt_files = glob.glob('**/*.txt', recursive=True) for file in all_txt_files: print(file)
**/*.txt
結(jié)合 recursive=True
會(huì)遞歸查找當(dāng)前目錄及其所有子目錄下的 .txt
文件。
三、glob 函數(shù)
(一)glob.glob(pathname, *, recursive=False)
功能:返回一個(gè)符合指定模式的文件和目錄路徑列表。
參數(shù):
pathname
:要匹配的路徑模式。recursive
:是否進(jìn)行遞歸匹配,默認(rèn)為False
。當(dāng)設(shè)置為True
時(shí),支持使用**
通配符進(jìn)行遞歸查找。
示例:
import glob # 匹配當(dāng)前目錄及其子目錄下所有以 test 開(kāi)頭的文件 test_files = glob.glob('**/test*', recursive=True) for file in test_files: print(file)
四、iglob 函數(shù)
(一)glob.iglob(pathname, *, recursive=False)
- 功能:返回一個(gè)迭代器,該迭代器會(huì)逐個(gè)產(chǎn)生符合指定模式的文件和目錄路徑。
- 參數(shù):與
glob.glob
相同。 - 示例:
import glob # 使用 iglob 迭代匹配當(dāng)前目錄下所有 .py 文件 py_files_iter = glob.iglob('*.py') for file in py_files_iter: print(file)
iglob
適合處理大量匹配結(jié)果的情況,因?yàn)樗粫?huì)一次性生成所有匹配結(jié)果,而是逐個(gè)產(chǎn)生,節(jié)省內(nèi)存。
五、glob 與其他文件查找方式的對(duì)比
查找方式 | 優(yōu)點(diǎn) | 缺點(diǎn) | 適用場(chǎng)景 |
---|---|---|---|
glob 模塊 | 使用簡(jiǎn)單,支持通配符匹配,能快速查找符合模式的文件和目錄。 | 模式匹配功能相對(duì)簡(jiǎn)單,不支持復(fù)雜的正則表達(dá)式匹配。 | 簡(jiǎn)單的文件和目錄查找,如按擴(kuò)展名、文件名前綴等查找。 |
os.walk 函數(shù) | 可以遞歸遍歷目錄樹(shù),能詳細(xì)控制遍歷過(guò)程。 | 需要手動(dòng)編寫(xiě)代碼進(jìn)行文件篩選,使用相對(duì)復(fù)雜。 | 需要對(duì)目錄樹(shù)進(jìn)行深度遍歷和復(fù)雜篩選的場(chǎng)景。 |
re 模塊(正則表達(dá)式) | 支持復(fù)雜的模式匹配,功能強(qiáng)大。 | 學(xué)習(xí)成本較高,代碼相對(duì)復(fù)雜。 | 需要進(jìn)行復(fù)雜文件名模式匹配的場(chǎng)景。 |
六、應(yīng)用場(chǎng)景
(一)批量文件處理
可以使用 glob
模塊查找符合特定模式的文件,然后對(duì)這些文件進(jìn)行批量處理,如批量重命名、批量讀取文件內(nèi)容等。
import glob # 批量重命名當(dāng)前目錄下所有 .txt 文件 txt_files = glob.glob('*.txt') for file in txt_files: new_name = file.replace('.txt', '_new.txt') import os os.rename(file, new_name)
(二)數(shù)據(jù)收集
在進(jìn)行數(shù)據(jù)收集時(shí),可能需要從多個(gè)文件中讀取數(shù)據(jù)??梢允褂?nbsp;glob
模塊查找相關(guān)文件,然后讀取數(shù)據(jù)。
import glob # 讀取當(dāng)前目錄及其子目錄下所有 .csv 文件的數(shù)據(jù) csv_files = glob.glob('**/*.csv', recursive=True) for file in csv_files: with open(file, 'r') as f: data = f.read() print(f"Data from {file}: {data[:100]}...")
文章總結(jié)
glob
模塊為 Python 開(kāi)發(fā)者提供了一種便捷的文件和目錄查找方式,通過(guò)使用 Unix 風(fēng)格的通配符規(guī)則,能快速定位符合特定模式的文件和目錄。glob.glob
函數(shù)返回匹配結(jié)果列表,glob.iglob
函數(shù)返回迭代器,適用于不同的應(yīng)用場(chǎng)景。在簡(jiǎn)單的文件查找和批量處理任務(wù)中,glob
模塊是一個(gè)非常實(shí)用的工具。
到此這篇關(guān)于Python文件路徑模式匹配glob模塊使用的文章就介紹到這了,更多相關(guān)Python文件路徑模式匹配glob模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Pygame框架實(shí)現(xiàn)飛機(jī)大戰(zhàn)
這篇文章主要為大家詳細(xì)介紹了Pygame框架實(shí)現(xiàn)飛機(jī)大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08Python利用sqlacodegen自動(dòng)生成ORM實(shí)體類示例
這篇文章主要介紹了Python利用sqlacodegen自動(dòng)生成ORM實(shí)體類,結(jié)合實(shí)例形式分析了Python sqlacodegen安裝技巧ORM實(shí)體類相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-06-06Tensorflow分類器項(xiàng)目自定義數(shù)據(jù)讀入的實(shí)現(xiàn)
這篇文章主要介紹了Tensorflow分類器項(xiàng)目自定義數(shù)據(jù)讀入的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02利用 Python 實(shí)現(xiàn)隨機(jī)相對(duì)強(qiáng)弱指數(shù) StochRSI
隨機(jī)相對(duì)強(qiáng)弱指數(shù)簡(jiǎn)稱為StochRSI,是一種技術(shù)分析指標(biāo),用于確定資產(chǎn)是否處于超買或超賣狀態(tài),也用于確定當(dāng)前市場(chǎng)的態(tài)勢(shì)。本篇文章小編九來(lái)為大家介紹隨機(jī)相對(duì)強(qiáng)弱指數(shù)簡(jiǎn)稱為StochRSI,需要的朋友可以參考下面文章的具體內(nèi)容2021-09-09Python+Pygame實(shí)戰(zhàn)之瘋狂吃水果游戲的實(shí)現(xiàn)
吃豆人和切水果這兩個(gè)游戲相信大家都不陌生吧,本文將利用Python中的Pygame模塊編寫(xiě)出一款結(jié)合吃豆人+切水果的新游戲:瘋狂吃水果,感興趣的可以了解一下2022-06-06