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行文本: 怎么办呢,
    --------------------
    
    """
  • 相关阅读:
    【转】聚集索引和非聚集索引的区别
    【转】【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式,并把SQLite的数据库文件存储在SD卡中!!!
    【转】数据库范式(1NF 2NF 3NF BCNF)详解一
    【转】数据库 无损连接分解
    如何防止被路由器限速如何更改电脑网卡的MAC地址
    BZOJ 1497 最大权闭合图
    POJ 1966 无向图点联通度 最小割
    POJ 1815 最小割
    POJ 2987 最大权闭合图
    POJ 2391 floyd+二分+最大流
  • 原文地址:https://www.cnblogs.com/zzy-9318/p/9839314.html
Copyright © 2011-2022 走看看