生成器案例,#採集日誌
阿新 • • 發佈:2018-11-23
生成器: 只要在函式體中看到yield,那麼這個函式就是生成器。 yield功能: 1:為我們提供了一種自定義迭代器物件的方法 2:yield其實也是一種返回值,他和return的區別就是:他可以返回多個值。並且函式暫停和繼續是有yield幫我們儲存的。
#採集日誌,並按關鍵資訊檢索,然後將收集到的資訊寫入另一個檔案。
import time #呼叫時間模組
def tail(filename): #定義生成器
with open(filename,'r') as f: #開啟檔案,讀取檔案,給檔案起個別名是f
f.seek(0,2) #將檔案中的游標移動到最後
while True: #死迴圈
qwe = f.readline() #從上到下讀取檔案然後賦值給qwe
if qwe: #如果qwe不為空,有值
yield qwe #那麼就返回qwe的值
else: #否則
time.sleep(0.05) #停0.05秒在執行
asd = tail('a.txt') #將函式的返回值賦給asd變數
def grep(filename,err): #定義一個過濾的函式
for i in asd: #遍歷tail函式中的返回值
if err in i: #判斷:按關鍵詞收集日誌,檢視返回值是否符合要求
with open(filename, 'a') as d: #開啟檔案,設定追加模式
d.writelines(i) #將這條符合條件的日誌寫在s.txt中
grep('s.txt','4') #呼叫grep函式,並傳兩個實參