保存yo有限的历史记录是collection.deque的完美应用场景。下面的代码对一系列文本行做简单的文本匹配操作,当发现有匹配时就输出当前的匹配行以及最后检查过的N行文本,
from collections import deque
def search(lines, pattern, history=5):
previous_lines = deque(maxlen=history)
for line in lines:
if pattern in line:
yield line, previous_lines
previous_lines.append(line)
if _name_ == '_mainn_:
with open('somefile.txt ')' as f:
for line,prevlines in search(f, 'python', 5):
for pline in prevlines:
print(pline, end='')
print('*'*20)
deque(maxlen=N)创建一个固定长度的队列。当新纪录加入而队列已满时会自动移除最老的那条纪录。例如:
>>>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)