提出问题:
有时候,我们希望能在迭代或者其他处理过程中,保留最后几个符合要求的内容记录。
解决思路:
保存最后N个元素或者有限历史记录,可以用到collections.deque方法。例如,在一个文件里面查找,符合要求的文字,当发现有成功匹配的就输出当前的匹配行以及最后检查过的N行文本。
from collections import deque #导入deque模块
def search(lines,pattern,history=5):
previous_lines=deque(maxlen=history)
for line in lines: #循环遍历
if pattern in line:
yield line ,previous_lines #yield 生成器,暂时保存返回当前变量
previous_lines.append(line)
if __name__ == '__main__':
with open('SearchPython.txt') as f: #打开本地文件
for line ,prevlines in search(f,'python',5): #在此文件中搜索,规则是python ,次数是5次
for pline in prevlines:
print(pline,end='') #下面是格式输出
print(line,end='')
print('-'*20)
本地一个SearchPython.txt文档