Python實(shí)現(xiàn)任意文件查找工具的不同方法詳解
摘要
在日常的開(kāi)發(fā)和運(yùn)維工作中,經(jīng)常需要查找特定類型的文件或帶有特定模式的文件。使用命令行工具如find、grep等可以滿足需求,但有時(shí)我們希望用編程語(yǔ)言來(lái)實(shí)現(xiàn)更加靈活和可定制化的解決方案。本文將介紹如何使用Python編寫(xiě)一個(gè)簡(jiǎn)單的文件查找工具,支持通配符匹配,并且可以在指定目錄下遞歸查找文件。我們將提供兩種不同的實(shí)現(xiàn)方式:一種基于os.walk()和fnmatch,另一種基于glob模塊。
環(huán)境準(zhǔn)備
確保你已經(jīng)安裝了Python 3.x版本。如果你還沒(méi)有安裝,請(qǐng)?jiān)L問(wèn)Python官網(wǎng)下載并安裝最新穩(wěn)定版。
實(shí)現(xiàn)方式一:使用os.walk()和fnmatch
實(shí)現(xiàn)思路
導(dǎo)入必要的庫(kù):我們將使用os模塊來(lái)遍歷目錄結(jié)構(gòu),使用fnmatch模塊來(lái)進(jìn)行通配符匹配。
定義函數(shù):創(chuàng)建一個(gè)名為find_files_with_os_walk的函數(shù),該函數(shù)接收兩個(gè)參數(shù):一個(gè)是目標(biāo)目錄路徑,另一個(gè)是包含通配符的文件名模式。
遞歸遍歷目錄:通過(guò)os.walk()方法遍歷給定目錄及其子目錄。
匹配文件名:對(duì)于每個(gè)文件,使用fnmatch.fnmatch()檢查其名稱是否符合提供的模式。
返回結(jié)果:將所有符合條件的文件路徑存儲(chǔ)在一個(gè)列表中,并最終返回該列表。
代碼實(shí)現(xiàn)
import os import fnmatch def find_files_with_os_walk(directory, pattern): """ 在指定目錄及其子目錄中查找符合給定模式的文件。 參數(shù): directory (str): 要搜索的根目錄路徑。 pattern (str): 文件名模式,支持通配符 * 和 ?。 返回: list: 符合條件的文件路徑列表。 """ matched_files = [] # 遍歷目錄樹(shù) for root, dirs, files in os.walk(directory): for basename in files: if fnmatch.fnmatch(basename, pattern): filename = os.path.join(root, basename) matched_files.append(filename) return matched_files # 示例用法 if __name__ == "__main__": import sys if len(sys.argv) != 3: print("Usage: python find_files.py <directory> <pattern>") sys.exit(1) directory = sys.argv[1] pattern = sys.argv[2] results = find_files_with_os_walk(directory, pattern) for result in results: print(f'查找的文件名:{result.split(os.sep)[-1]}', f'完整路徑:{result}')
實(shí)現(xiàn)方式二:使用glob模塊
實(shí)現(xiàn)思路
導(dǎo)入必要的庫(kù):我們將使用glob模塊,它可以直接處理通配符模式,簡(jiǎn)化了文件查找過(guò)程。
定義函數(shù):創(chuàng)建一個(gè)名為find_files_with_glob的函數(shù),該函數(shù)接收兩個(gè)參數(shù):一個(gè)是目標(biāo)目錄路徑,另一個(gè)是包含通配符的文件名模式。
生成文件路徑:通過(guò)glob.glob()方法生成符合條件的文件路徑列表。
返回結(jié)果:直接返回生成的文件路徑列表。
代碼實(shí)現(xiàn)
import glob import os def find_files_with_glob(directory, pattern): """ 在指定目錄及其子目錄中查找符合給定模式的文件。 參數(shù): directory (str): 要搜索的根目錄路徑。 pattern (str): 文件名模式,支持通配符 * 和 ?。 返回: list: 符合條件的文件路徑列表。 """ # 將目錄路徑與模式組合成完整的路徑模式 full_pattern = os.path.join(directory, "**", pattern) # 使用glob模塊進(jìn)行查找 matched_files = glob.glob(full_pattern, recursive=True) return matched_files # 示例用法 if __name__ == "__main__": import sys if len(sys.argv) != 3: print("Usage: python find_files.py <directory> <pattern>") sys.exit(1) directory = sys.argv[1] pattern = sys.argv[2] results = find_files_with_glob(directory, pattern) for result in results: print(f'查找的文件名:{result.split(os.sep)[-1]}', f'完整路徑:{result}')
使用說(shuō)明
保存上述代碼為find_files.py后,在命令行中運(yùn)行此腳本時(shí)需要提供兩個(gè)參數(shù):一個(gè)是想要搜索的目標(biāo)目錄路徑,另一個(gè)是要查找的文件名模式(例如*.txt)。例如:
$ python find_files.py /path/to/search "*.log"
這將在/path/to/search目錄及其所有子目錄中查找所有擴(kuò)展名為.log的文件,并打印出它們的完整路徑。
總結(jié)
通過(guò)這篇文章,我們學(xué)習(xí)了兩種使用Python內(nèi)置庫(kù)快速構(gòu)建帶通配符的文件查找工具的方法:
- 使用os.walk()和fnmatch:適用于需要更細(xì)粒度控制的情況,如過(guò)濾文件類型、排除某些目錄等。
- 使用glob模塊:簡(jiǎn)單直觀,適合大多數(shù)常規(guī)文件查找任務(wù)。
這兩種方法不僅簡(jiǎn)單易懂,而且非常靈活,可以根據(jù)實(shí)際需求進(jìn)一步擴(kuò)展功能,比如添加多線程支持以提高效率,或者集成到更大的應(yīng)用程序中作為一部分功能。
到此這篇關(guān)于Python實(shí)現(xiàn)任意文件查找工具的不同方法詳解的文章就介紹到這了,更多相關(guān)Python文件查找內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python調(diào)用win32接口進(jìn)行截圖的示例
這篇文章主要介紹了python調(diào)用win32接口進(jìn)行截圖的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-11-11Python基于最小二乘法實(shí)現(xiàn)曲線擬合示例
這篇文章主要介紹了Python基于最小二乘法實(shí)現(xiàn)曲線擬合,涉及Python基于numpy及scipy庫(kù)進(jìn)行曲線擬合操作相關(guān)運(yùn)算技巧,需要的朋友可以參考下2018-06-06Python實(shí)現(xiàn)全自動(dòng)安裝第三方庫(kù)的方法
這篇文章主要介紹了Python實(shí)現(xiàn)全自動(dòng)安裝第三方庫(kù)的方法,一說(shuō)Python要安裝哪個(gè)模塊,我們第一反應(yīng),win+r輸入cmd,pip?instll安裝,但是如果換電腦了,Python第三方庫(kù)那么多,難道要一次一次的敲擊pip?install,本文就介紹一個(gè)簡(jiǎn)單的方法解放雙手,需要的朋友可以參考下2023-07-07Python使用psutil對(duì)系統(tǒng)數(shù)據(jù)進(jìn)行采集監(jiān)控
psutil庫(kù)可以實(shí)時(shí)獲取系統(tǒng)的一些信息,這樣就可以達(dá)到實(shí)時(shí)監(jiān)控系統(tǒng)的目的。本文對(duì)詳細(xì)講解了ython使用psutil對(duì)系統(tǒng)數(shù)據(jù)進(jìn)行采集監(jiān)控,感興趣的朋友可以看一看2021-08-08Win10環(huán)境python3.7安裝dlib模塊趟過(guò)的坑
這篇文章主要介紹了Win10環(huán)境python3.7安裝dlib模塊趟過(guò)的坑,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08Python爬蟲(chóng)進(jìn)階之Beautiful Soup庫(kù)詳解
這篇文章主要介紹了Python爬蟲(chóng)進(jìn)階之Beautiful Soup庫(kù)詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python爬蟲(chóng)的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04