python之保留有限的历史记录(collections.deque)

Posted 朱兆筠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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行文本: 怎么办呢,
--------------------

"""

 


以上是关于python之保留有限的历史记录(collections.deque)的主要内容,如果未能解决你的问题,请参考以下文章

python实用小技之数据结构

第一章 1.3 保留后N个元素

1.3 保留最后N个元素

python 重命名具有迁移功能的Django应用程序已经很糟糕。这是我发现的一种方法,可以保留您的旧迁移历史记录并保留

Linux系统之history命令的基本使用

11.维度属性选择之维护历史是否应该保留