zoukankan      html  css  js  c++  java
  • 生成器案例,#采集日志

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

  • 相关阅读:
    ElasticSearch权威指南学习(分布式搜索)
    ElasticSearch5.0之后的改变
    ElasticSearch权威指南学习(排序)
    ElasticSearch权威指南学习(结构化查询)
    ElasticSearch权威指南学习(映射和分析)
    ElasticSearch权威指南学习(分布式文档存储)
    ElasticSearch权威指南学习(文档)
    ElasticSearch权威指南学习(分布式集群)
    ElasticSearch核心知识总结(二)
    [书籍分享]0-006.微信从业人员推荐阅读的100本经典图书
  • 原文地址:https://www.cnblogs.com/dayle/p/10009634.html
Copyright © 2011-2022 走看看