zoukankan      html  css  js  c++  java
  • python之保留有限的历史记录(collections.deque)

    1、deque(maxlen=N)创建一个固定长度的队列,当有新的记录加入而队列已经满时,会自动移除老的记录.

    from collections import deque
    q = deque(maxlen=3)
    q.append(1)
    q.append(2)
    q.append(3)
    q
    deque([1, 2, 3], maxlen=3)
    q.append(4)
    q
    deque([2, 3, 4], maxlen=3)

    应用功能:

    保存有限的历史记录collections.deque的完美应用场景,例如下面的代码对一段文本做简单的文本匹配处理,当发现有匹配的时就输出当前的匹配行,
    以及最后检查过的N行文本

    from collections import deque
    
    
    def search(lines, pattern, history=5):
        previous_lines = deque(maxlen=history) #collection.deque : deque (maxlen=N)创建了一个固定长度的队列,当有新的队列已满时会自动移除最老的那条记录  # deque([], maxlen=5) 创建一个队列
        for line in lines:
            print('当前要匹配行:', line)
            if pattern in line:
                yield line, previous_lines     #  previous: deque(['python1
    ', 'python2
    ', '怎么办呢,
    '], maxlen=5)
    
    
    if __name__ == '__main__':
        with open('somefile.txt') as f:
            for line, previous in search(f, 'python', 5):  # 调用search函数,每次yield当前匹配的文本和最后匹配检查过的N行文本
                print('line:',line,'previous:',previous)
                for pline in previous:
                    print('最后匹配检查过的N行文本:',pline, end='')
                print('-' * 20)
    
    """
    
    somefile.txt文本内容:
    
    python1
    python2
    怎么办呢,
    失效一处python3。
    
    
    输出:
    当前要匹配行: python1
    
    line: python1
     previous: deque([], maxlen=5)
    --------------------
    当前要匹配行: python2
    
    line: python2
     previous: deque(['python1
    '], maxlen=5)
    最后匹配检查过的N行文本: python1
    --------------------
    当前要匹配行: 怎么办呢,
    
    当前要匹配行: 失效一处python3。
    line: 失效一处python3。 previous: deque(['python1
    ', 'python2
    ', '怎么办呢,
    '], maxlen=5)
    最后匹配检查过的N行文本: python1
    最后匹配检查过的N行文本: python2
    最后匹配检查过的N行文本: 怎么办呢,
    --------------------
    
    """
  • 相关阅读:
    CentOS7.5 防火墙指令
    监控Tomcat
    MySQL.ERROR 1133 (42000): Can't find any matching row in the user table
    Hadoop.之.入门部署
    Jenkins. 安装过程中出现一个错误: No such plugin: cloudbees-folder
    Spring.之.报错:Caused by: java.lang.ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException
    Spring.之.jar包官网下载
    Linux 安装Eclipse
    Linux SSH 免秘钥登录
    Linux rz命令无效
  • 原文地址:https://www.cnblogs.com/zzy-9318/p/9839314.html
Copyright © 2011-2022 走看看