python實(shí)現(xiàn)搜索文本文件內(nèi)容腳本
本文介紹用python實(shí)現(xiàn)的搜索本地文本文件內(nèi)容的小程序。從而學(xué)習(xí)Python I/O方面的知識(shí)。代碼如下:
import os
#根據(jù)文件擴(kuò)展名判斷文件類(lèi)型
def endWith(s,*endstring):
array = map(s.endswith,endstring)
if True in array:
return True
else:
return False
#將全部已搜索到的關(guān)鍵字列表中的內(nèi)容保存到result.log文件中
def writeResultLog(allExistsKeywords):
#行分隔符
ls = os.linesep
#結(jié)果日志文件名
logfilename = "result.log" #相對(duì)路徑,文件在.py文件所在的目錄中
try:
fobj = open(logfilename,'w')
except IOError,e:
print "*** file open error:",e
else:
fobj.writelines(['%s%s' % (keyword,ls) for keyword in allExistsKeywords])
fobj.close()
#搜索指定關(guān)鍵字是否在指定的文件中存在
def searchFilesContent(dirname):
#從searchkeywords.txt文件中初始化待搜索關(guān)鍵字列表
filename = "searchkeywords.txt" #相對(duì)路徑,文件在.py文件所在的目錄中
#待搜索關(guān)鍵字列表
allSearchKeywords=[]
#遍歷文件當(dāng)前行已搜索到的關(guān)鍵字列表
existsKeywordsThisLine=[]
#全部已搜索到的關(guān)鍵字列表
allExistsKeywords=[]
try:
fobj = open(filename,'r');
except IOError,e:
print "*** file open error:",e
else:
for eachLine in fobj:
allSearchKeywords.append(eachLine.strip('\n')); #使用strip函數(shù)去除每行的換行符
fobj.close();
#從excludekeywords.txt文件中初始化要排除的搜索關(guān)鍵字列表
filename = "excludekeywords.txt" #相對(duì)路徑,文件在.py文件所在的目錄中
#要排除的搜索關(guān)鍵字列表
allExcludedKeywords=[]
try:
fobj = open(filename,'r');
except IOError,e:
print "*** file open error:",e
else:
for eachLine in fobj:
allExcludedKeywords.append(eachLine.strip('\n')); #使用strip函數(shù)去除每行的換行符
fobj.close();
#從全部已搜索到的關(guān)鍵字列表排除掉不用搜索的關(guān)鍵字
for excluedkw in allExcludedKeywords:
if(excluedkw in allSearchKeywords):
allSearchKeywords.remove(excluedkw);
#遍歷打開(kāi)所有要在其中搜索內(nèi)容的文件,若待搜索關(guān)鍵字列表為空,則不再繼續(xù)遍歷
for root,dirs,files in os.walk(dirname):
for file in files:
if endWith(file,'.java','.xml','.properties'): #只在擴(kuò)展名為.java/.xml/.properties文件中搜索
#打開(kāi)文件
filename = root + os.sep + file #絕對(duì)路徑
filename = filename.replace("\\","\\\\") #將路徑中的單反斜杠替換為雙反斜杠,因?yàn)閱畏葱备芸赡軙?huì)導(dǎo)致將路徑中的內(nèi)容進(jìn)行轉(zhuǎn)義了,replace函數(shù)中"\\"表示單反斜杠,"\\\\"表示雙反斜杠
try:
fobj = open(filename,'r');
except IOError,e:
print "*** file open error:",e
else:
#遍歷文件的每一行
for fileLine in fobj:
#判斷當(dāng)前行是否包含所有搜索關(guān)鍵字
for keyword in allSearchKeywords:
#若包含,并添加到該行已搜索到的關(guān)鍵字列表中
if keyword.upper() in fileLine.upper(): #將搜索關(guān)鍵字和該行文本內(nèi)容都轉(zhuǎn)換為大寫(xiě)后再進(jìn)行匹配
existsKeywordsThisLine.append(keyword)
#將這些搜索到的關(guān)鍵字添加到全部已搜索到的關(guān)鍵字列表中,并包含文件名信息
for keyword in existsKeywordsThisLine:
allExistsKeywords.append(keyword+"\t"+filename.replace("\\\\","\\"))
#將這些搜索到的關(guān)鍵字從待搜索關(guān)鍵字列表中移除(后續(xù)將不再搜索該關(guān)鍵字)
for keyword in existsKeywordsThisLine:
allSearchKeywords.remove(keyword)
#清空該行已搜索到的關(guān)鍵字列表內(nèi)容
existsKeywordsThisLine = []
#若所有的關(guān)鍵字都搜索到了,則記錄日志文件,并結(jié)束搜索工作
if len(allSearchKeywords)==0:
fobj.close();
writeResultLog(allExistsKeywords)
print "DONE!",
return
fobj.close();
#全部文件遍歷結(jié)束
writeResultLog(allExistsKeywords)
print "DONE!",
#僅當(dāng)本python模塊直接執(zhí)行時(shí),才執(zhí)行如下語(yǔ)句,若被別的python模塊引入,則不執(zhí)行
if __name__ == '__main__':
searchFilesContent(r"G:\ccsSmartPipe\SmartPipe\src\java")
1.筆者使用該程序?qū)ava項(xiàng)目中的源文件內(nèi)容進(jìn)行關(guān)鍵字的搜索。程序入?yún)樵擁?xiàng)目本地文件系統(tǒng)路徑G:\ccsSmartPipe\SmartPipe\src\java。
2.在配置文件中searchkeywords.txt中輸入要搜索的任意多個(gè)關(guān)鍵字

3.在配置文件中excludekeywords.txt中輸入在searchkeywords.

4.程序執(zhí)行完成后,即可在result.log日志文件中,查看搜索結(jié)果。即每個(gè)關(guān)鍵在哪些文件中存在。并給出每個(gè)文件的具體路徑。

附件:源代碼及配置文件
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python使用正則搜索字符串或文件中的浮點(diǎn)數(shù)代碼實(shí)例
- python實(shí)現(xiàn)的用于搜索文件并進(jìn)行內(nèi)容替換的類(lèi)實(shí)例
- python實(shí)現(xiàn)搜索本地文件信息寫(xiě)入文件的方法
- python 搜索大文件的實(shí)例代碼
- python實(shí)現(xiàn)指定文件夾下的指定文件移動(dòng)到指定位置
- python 移動(dòng)圖片到另外一個(gè)文件夾的實(shí)例
- python實(shí)現(xiàn)批量移動(dòng)文件
- python搜索指定類(lèi)型文件以及批量移動(dòng)文件程序詳解
相關(guān)文章
PyQt5連接MySQL及QMYSQL driver not loaded錯(cuò)誤解決
這篇文章主要介紹了PyQt5連接MySQL及QMYSQL driver not loaded錯(cuò)誤解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
Python pandas 重命名索引和列名稱(chēng)的實(shí)現(xiàn)
本文主要介紹了Python pandas 重命名索引和列名稱(chēng)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
Python的Flask框架與數(shù)據(jù)庫(kù)連接的教程
這篇文章主要介紹了Python的Flask框架與數(shù)據(jù)庫(kù)連接的教程,是Flask框架學(xué)習(xí)當(dāng)中的基本知識(shí),需要的朋友可以參考下2015-04-04
Ubuntu配置Pytorch on Graph (PoG)環(huán)境過(guò)程圖解
這篇文章主要介紹了Ubuntu配置Pytorch on Graph (PoG)環(huán)境過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
PyCharm運(yùn)行python測(cè)試,報(bào)錯(cuò)“沒(méi)有發(fā)現(xiàn)測(cè)試”/“空套件”的解決
這篇文章主要介紹了PyCharm運(yùn)行python測(cè)試,報(bào)錯(cuò)“沒(méi)有發(fā)現(xiàn)測(cè)試”/“空套件”的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
Python實(shí)現(xiàn)從log日志中提取ip的方法【正則提取】
這篇文章主要介紹了Python實(shí)現(xiàn)從log日志中提取ip的方法,涉及Python文件讀取、數(shù)據(jù)遍歷、正則匹配等相關(guān)操作技巧,需要的朋友可以參考下2018-03-03
python3 cvs將數(shù)據(jù)讀取為字典的方法
今天小編就為大家分享一篇python3 cvs將數(shù)據(jù)讀取為字典的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12

