参考《python cookbook》
如果需要在迭代或者其他形式的处理过程中对最后几项纪录做一个有限的历史记录统计,我们可以使用collections.deque
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time : 2024/7/14 下午9:18
# @Author : s
# 对文本做简单的文本匹配处理,当发现有匹配时,就输出当前的匹配行以及最后检查过的N行文本
from collections import deque
def search_d(lines, pattern, histoy=5):
previuos_lines = deque(maxlen=histoy)
for line in lines:
if pattern in line:
yield line, previuos_lines
previuos_lines.append(line)
if __name__ == '__main__':
with open('somefile.txt') as f:
for line, prevlines in search_d(f, 'python', 5):
for pline in prevlines:
print(pline, end='')
print(line, end='')
print('-'*20)
deque(maxlen=N)
创建一个固定长度的队列,当有新的记录加入且此时队列已满,则会自动移除最老的那条记录
image.png
这样操作比
del
等优雅的多,运行速度也比较快。deque(maxlen=N)
还可以对队列的两端执行添加和弹出操作。image.png