yield生成迭代器
yield生成迭代器是将一个函数通过yield方法将其转化为迭代器,其中yield后面的值为迭代器每执行一次next返回的值
使用迭代器模仿Linux终端中 tail -f filename.txt |grep 'error' |grep '404'命令
import time
# 读取文件每一行,使用yield程序制作为迭代器
def tail(file_path):
with open(file_path, 'r', encoding='utf-8') as f:
f.seek(0, 1) # 将文件指针指向最后一个
# 让文件死循环,不断读取新增内容
while True:
line = f.readline()
# 如果line非空,说明是新内容,返回
if line:
yield line
# 如果为空,说明没有新内容,这是为了降低循环次数沉睡1秒
else:
time.sleep(1)
# 遍历lines中的每一行中是否含有string,将其作为第二个迭代器
def grep(lines, string):
# 遍历lines迭代器
for each_line in lines:
if string in each_line:
yield each_line
path = '123.txt'
t = tail(path)
s = '404'
g = grep(t, s)
for i in g:
print(i)