1. 程式人生 > >生成器案例,#採集日誌

生成器案例,#採集日誌

 

生成器: 只要在函式體中看到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函式,並傳兩個實參