轉帖|使用教程|編輯:黃竹雯|2019-04-17 11:29:26.000|閱讀 225 次
概述:Python 生成器 yield 是編寫基于處理管道,流或數據流程序的一種極其強大的方式,在《Python參考手冊》中有一則實例非常簡單實用,略加修改,分享一下給大家。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
Python 生成器 yield 是編寫基于處理管道,流或數據流程序的一種極其強大的方式,在《Python參考手冊》中有一則實例非常簡單實用,略加修改,分享一下給大家。如果你對生成器yield還不是很了解,可以查看《覺得Python中的生成器(yield)晦澀難懂?看完本文你就知道了》。
假設服務器有一個日志文件,每隔一秒都會更新日志的內容,日志每行中都有一組類似:2017-12-21 14:07:26.471691 99123 數據被寫入日志。 我們的目的是分析日志中的數字如果大于5000就要打印出來。 這樣來看,我們需要一個程序負責模擬日志寫入,另一個程序負責分析日志打印數據。
server_log.py:
import random from datetime import * import os import time def server_log(): # 生成模擬的日志數據 server_int = random.randint(1,99999)#生成需要的隨機數 server_date = datetime.now()#獲取當前系統時間 return str(server_date) + ' ' + str(server_int)#拼裝日志字符串 while True: #模擬系統寫入日志 #打開日志文件并寫入日志 with open(os.path.join(os.path.dirname(__file__),'server_log.log'),'at') as f : s = server_log() print(s) f.write(s + '\n') time.sleep(1)
上邊的代碼已經添加了相關的注釋,這樣我們就有了一個日志文件,每秒會有一第記錄插入到日志中。
生成器可以返回一個迭代的流式的對象,我們可以通過這種方式便捷的獲得相關數據,而且代碼也更清晰易懂
tail.py 代碼如下:
import time def tail(f): f.seek(0,2)#移動到文件尾部。 while True: line = f.readline() if not line : time.sleep(1) continue yield line def grep(lines): for l in lines: k = int(l.split()[2]) if k >50000: yield l serverlog = tail(open('server_log.log')) lines = grep(serverlog) for line in lines: print(line)
我們運行兩個文件看下效果:
代碼雖然簡單,但值得細細品味,感受python的簡約與強大吧。
【專業Python IDE推薦】——PyCharm (正版低至¥1068):
PyCharm 是一款Python IDE,其帶有一整套可以幫助用戶在使用Python語言開發時提高其效率的工具。此外,該IDE提供了一些高級功能,以用于Django框架下的專業Web開發。
PyCharm基礎教程推薦:
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn