Python基于文件內(nèi)容實現(xiàn)查找文件功能
該章節(jié)將學(xué)習(xí)關(guān)于文件查找的操作,大家都知道,無論是 Linux 系統(tǒng)還是 Windows 系統(tǒng)都有基于文件名實現(xiàn)過濾、查找的功能。但是如果想要查找一些關(guān)于某些文件指定內(nèi)容的文件,好像無論是 Linux 還是 Windows 明面上沒有這樣的功能了。這個時候就可以通過 Python 來實現(xiàn)這樣的功能,通過該章節(jié)的學(xué)習(xí),就可以學(xué)習(xí)到該功能的如何利用 Python 實現(xiàn)這樣的操作。
文件查找操作
glob 的介紹
glob 包是一個快速查找文件夾中內(nèi)容的包,可以通過模糊查找的形式找到我們想要的內(nèi)容。
glob 的基本使用
導(dǎo)入包與模塊
from glob import glob
使用方法
glob(任意目錄)
返回內(nèi)容:
指定路徑下的內(nèi)容列表,不存在的路徑返回空列表。
代碼示例如下:
# coding:utf-8 import os from glob import glob target = os.getcwd() result = glob(target) print(result) # 打印輸出當(dāng)前路徑的文件夾 result = glob(target + '/*') print(result) # 打印輸出當(dāng)前路徑的文件夾下的所有文件 result = glob(target + '/*.py') print(result) # 打印輸出當(dāng)前路徑的文件夾下的所有以 "py" 結(jié)尾的文件 result = glob(target + '/*.zip') print(result) # 打印輸出當(dāng)前路徑的文件夾下的所有以 "zip" 結(jié)尾的文件 result = glob(target + '/filetest*') print(result) # # 打印輸出當(dāng)前路徑的文件夾下的所有以 "filetest" 開頭的文件
運行結(jié)果如下:
查找指定的文件
已知條件:
想查找的文件名已經(jīng)知道,但是目錄在哪里并不知道。
實現(xiàn)方法:
利用 "glob" 從最上級目錄開始查找,利用遞歸模式,不斷的查找,直到找到為止。
代碼示例如下:
# coding:utf-8 import glob """ 獲取當(dāng)前路徑下所有內(nèi)容 判斷每個內(nèi)容的類型(文件夾還是文件) 若是文件夾則繼續(xù)遞歸查找 """ path = glob.os.path.join(glob.os.getcwd(), '*') # 獲取當(dāng)前文件夾下的所有內(nèi)容 # glob 模塊其實已經(jīng)包含了 "os" 模塊 final_result = [] # 定義一個空列表,用以存儲 search() 函數(shù)查到的內(nèi)容 def search(path, target): # 定義 search() 函數(shù),傳入 "path" 文件路徑, "target" 要查找的目標(biāo)文件 result = glob.glob(path) for data in result: # for 循環(huán)判斷遞歸查到的內(nèi)容是文件夾還是文件 if glob.os.path.isdir(data): # 若是文件夾,繼續(xù)將該文件夾的路徑傳給 search() 函數(shù)繼續(xù)遞歸查找 _path = glob.os.path.join(data, '*') search(_path, target) else: # 若是文件,則將該查詢到的文件所在路徑插入 final_result 空列表 if target in data: final_result.append(data) return final_result if __name__ == '__main__': result = search(path, target='filetest.py') print(result)
運行結(jié)果如下:
基于文件內(nèi)容查找文件
接下來我們看一下查找指定內(nèi)容的文件:
已知條件:
文件中包含有某些關(guān)鍵字,但是不知道文件名和文件所在路徑
實現(xiàn)方法:
利用 "glob" 從最上級目錄開始查找,利用遞歸模式,不斷的查找。如果是文件夾則進入繼續(xù)查找,是文件則讀取,判斷是否包含該內(nèi)容,返回該內(nèi)容的文件名以及所在路徑。
其實,基于文件內(nèi)容查找文件實現(xiàn)的方式大體與上文的查找指定文件大體相似,只不過加入了讀取文件的判斷罷了。
代碼示例如下:
# coding:utf-8 import glob """ 獲取當(dāng)前路徑下所有內(nèi)容 判斷每個內(nèi)容的類型(文件夾還是文件) 若是文件夾則繼續(xù)遞歸查找 """ path = glob.os.path.join(glob.os.getcwd(), '*test04') # 因為下文捕獲不可讀文件格式太多,所以這里直接指定了 "test04" 路徑 final_result = [] # 定義一個空列表,用以存儲 search() 函數(shù)查到的內(nèi)容 def search(path, target): # 定義 search() 函數(shù),傳入 "path" 文件路徑, "target" 要查找的目標(biāo)文件 result = glob.glob(path) for data in result: # for 循環(huán)判斷遞歸查到的內(nèi)容是文件夾還是文件 if glob.os.path.isdir(data): # 若是文件夾,繼續(xù)將該文件夾的路徑傳給 search() 函數(shù)繼續(xù)遞歸查找 _path = glob.os.path.join(data, '*') search(_path, target) else: # 若是文件,則將該查詢到的文件所在路徑插入 final_result 空列表 f = open(data, 'r') # 利用 open() 函數(shù)讀取文件,并通過 try...except... 捕獲不可讀的文件格式(.zip 格式) try: content = f.read() if target in content: final_result.append(data) except: print('這是不可讀文件格式的文件的所在路徑:{} '.format(data)) continue finally: f.close() return final_result if __name__ == '__main__': result = search(path, target='測試文件') print(result)
運行結(jié)果如下:
到此這篇關(guān)于Python基于文件內(nèi)容實現(xiàn)查找文件功能的文章就介紹到這了,更多相關(guān)Python文件查找內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決pycharm最左側(cè)Tool Buttons顯示不全的問題
今天小編就為大家分享一篇解決pycharm最左側(cè)Tool Buttons顯示不全的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12Python實現(xiàn)矩陣轉(zhuǎn)置的方法分析
這篇文章主要介紹了Python實現(xiàn)矩陣轉(zhuǎn)置的方法,結(jié)合實例形式較為詳細(xì)的分析了Python實現(xiàn)矩陣轉(zhuǎn)置的相關(guān)操作技巧,需要的朋友可以參考下2017-11-11python數(shù)學(xué)建模之Numpy?應(yīng)用介紹與Pandas學(xué)習(xí)
這篇文章主要介紹了python數(shù)學(xué)建模之Numpy?應(yīng)用介紹與Pandas學(xué)習(xí),NumPy?是一個運行速度非常快的數(shù)學(xué)庫,一個開源的的python科學(xué)計算庫,主要用于數(shù)組、矩陣計算2022-07-07Python并發(fā)編程隊列與多線程最快發(fā)送http請求方式
假如有一個文件,里面有10萬個url,需要對每個url發(fā)送http請求,并打印請求結(jié)果的狀態(tài)碼,如何編寫代碼盡可能快的完成這些任務(wù)呢2021-09-09