from collections import deque
def search(lines, pattern, history=6):
"""
每次匹配成功时,就输出当前的匹配行,以及最后匹配成功的N行文本
:param lines: 全部文本
:param pattern: 查找内容
:param history: 最后n行
:return:
"""
previous_lines = deque(maxlen=history) # 创建固定长度的队列
for line in lines: # 遍历文档全部行
if pattern in line: # 如果在当前行
yield line, previous_lines # 则返回当前匹配行内容,和前面匹配到的行内容
previous_lines.append(line) # 固定长度队列(先进先出)。记录最新匹配到的n行内容,外面处理完后,会跳转到这里继续遍历文档
if __name__ == '__main__':
with open('file_name.txt') as f:
for line, prev_lines in search(lines=f, pattern='hello', history=5): # 当匹配成功时, 不断的调用search生成器函数
# 然后是输出一些东西
for prev_line in prev_lines: # 最后匹配成功的N行文本
print(prev_line, end=' ')
print(line, end=' ') # 当前匹配到的行