在文件中迭代for时向后移动



想象一下这种情况:

包含1000行的文件。文件名为file.txt

file = file.txt
word = 'error'
for line in file:
if word in line:
execute things

如果我想要8行与单词"error"行之前,我怎么得到它?

读取文件并将行保存为固定大小的deque

from collections import deque
file = "file.txt"
word = 'error'
lines = deque(maxlen=8)
with open(file) as f:
for line in f:
if word in line:
break
lines.append(line)
print(lines)

可以使用固定长度的collections.deque()itertools.takewhile()的组合

from collections import deque
from itertools import takewhile
with open("file.txt") as f:
lines = deque(takewhile(lambda l: "error" not in l, f), maxlen=8)
print(*lines, sep="", end="")

最新更新