我正在使用
逐个循环遍历所有行line = file.readline()
现在每行搜索特定字符串(XYZ) -
line.startswith('XYZ')
我无法弄清楚如何找到相对于找到字符串XYZ
匹配的行后面的几行。
我知道这可能是微不足道但却无法实现的。
答案 0 :(得分:3)
您可以使用collections.deque()
缓存前两行:
#!/usr/bin/env python
import sys
from collections import deque
cached_lines = deque(maxlen=2) # keep 2 lines
for line in sys.stdin:
if line.startswith('XYZ'):
sys.stdout.writelines(cached_lines)
cached_lines.append(line)
优点是您不需要将整个文件读入内存。
$ python . <input >output
XYZ 1
2
3
4
XYZ 5
XYZ 6
7
8
9
XYZ 10
11
12
3
4
4
XYZ 5
8
9
答案 1 :(得分:0)
file.tell()提供当前文件指针。 file.seek(指针)将文件指针设置为给定指针。如下面的代码,
pointer = file.tell()
...
...
...
file.seek(指针)
答案 2 :(得分:0)
您需要保存所有已降级的行或只需使用readlines
方法。
lines = file.readlines()
for i in range(0, len(lines)):
if lines[i].startswith("XYZ"):
print lines[i-2]
print lines[i-1]