您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Python 中怎么利用多線程搜索txt文件內容,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
import threading import os class Find(threading.Thread): #搜索數據的線程類 def __init__(self,datalist,startIndex,endIndex,searchstr,savefile): #datalist要搜索的內容列表,startIndex列表搜索范圍的開始下標,searchstr要搜索的內容 threading.Thread.__init__(self) self.datalist=datalist #要搜索的數據的內存地址 self.startIndex=startIndex #開始的索引 self.endIndex=endIndex #結束的索引 self.seachstr=searchstr #需要搜索的數據 self.savefile=savefile def run(self): self.findlist=[] for i in range(self.startIndex,self.endIndex): line=self.datalist[i].decode("gbk","ignore") #讀取一行 if line.find(self.seachstr)!=-1: print(self.getName(),line,end="") #搜索數據 self.findlist.append(line) global mutex #多線程共享全局變量(全局鎖) with mutex: #獲取鎖(自動釋放鎖) for line in self.findlist: self.savefile.write(line.encode("gbk")) mutex=threading.Lock() #創建一個鎖 savefile=open("c:\\zhaodao.txt","wb") #搜索到的內容寫入該文件 path = "C:\\data1.txt" #要搜索的文件 file = open(path, "rb") datalist = file.readlines() # 全部讀入內存 lines=len(datalist) #所有的行數 searchstr=input("輸入要查詢的數據") N=10 #開啟10個線程 threadlist=[] #線程列表 # 97 9 0-1000000 1000000-2000000 2000000-3000000 for i in range(0,N-1): #0,1,2,3,4,5,6,7,8 數據切割 mythd= Find(datalist,i*(lines//(N-1)) , (i+1)*(lines//(N-1)),searchstr,savefile) # //表示整除 mythd.start() threadlist.append(mythd) #添加到線程列表 #97 = 97//10*10=90 mylastthd= Find(datalist,lines//(N-1)*(N-1),lines,searchstr,savefile) #最后的線程搜索剩下的尾數 mylastthd.start() threadlist.append(mylastthd) #添加到線程列表 for thd in threadlist: #遍歷線程列表 thd.join() print("finish")
關于Python 中怎么利用多線程搜索txt文件內容就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。