文本匹配,只返回匹配成功的行

 1 from collections import deque
 2 
 3 
 4 def search(lines, pattern, history=5):
 5     previous_lines = deque(maxlen=history)  # 只取history值列
 6     # 提供了两端都可以操作的序列, 这意味着, 你可以在序列前后都执行添加或删除,
 7     # 当限制长度的deque增加超过限制数的项时, 另一边的项会自动删除
 8     for li in lines:
 9         if pattern in li:
10             yield li  # yield 进行迭代
11             # 带yield的函数是一个生成器,而不是一个函数了,这个生成器有一个函数就是next函数,next就相当于“下一步”生成哪个数,
12             # 这一次的next开始的地方是接着上一次的next停止的地方执行的,所以调用next的时候,生成器并不会从foo函数的开始执行,只是接着上一步停止的地方开始,然后遇到yield后,return出要生成的数,此步就结束。
13         previous_lines.append(li)
14 
15 
16 if __name__ == '__main__':
17     count = 0
18     with open('C:\Users\Administrator\Desktop\文件\doc\test.txt') as f:
19         for line in search(f, 'runningdoctor', 5):
20             print(line, end='')
21             count += 1
22             print('-' * 20)
23         print(count)
原文地址:https://www.cnblogs.com/jescs/p/11867597.html