生成器案例,#采集日志

 

生成器:
只要在函数体中看到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函数,并传两个实参

posted @ 2018-11-23 20:38  Dayle  阅读(198)  评论(0编辑  收藏  举报