保存最后N个匹配到的元素

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=' ')  # 当前匹配到的行

 

你可能感兴趣的:(Python)