我有一个带行的文本文件,按顺序:
line 1
line 2
line 3
line 4
line 5
现在,例如,如果文本文件中存在line 4
,我需要按顺序显示相对于line 4
的上一个或下一个字:previous line 3
next {{1} }}
line 5
如果data = open('file.txt', "r")
searchlines = data.readlines()
for q_numb, line in enumerate(searchlines):
if ('line 4') in line:
prev_line = searchlines[q_numb - 1]
print ('"line 4" is found:',line, 'previous of "line 4" is:',prev_line)
break
data.close()
或IndexError: list index out of range
来到不存在的行,如何避免[q_numb - 1]
?我应该告诉它做别的事情,也许以某种方式预测它?但是,我该怎么做,如果[q_numb + 1]
或-
来到不存在的行,我怎么知道做其他事情? (例如,在这种情况下只读取当前行。)
答案 0 :(得分:0)
关键是检查当前行i
的索引是否总是大于0且小于文件的长度,因此在任何时候总是有前一行和下一行。< / p>
with open('file.txt', 'r') as f:
lines = f.readlines()
for i, line in enumerate(lines):
if 'line 3' in line and 0 < i < len(lines):
print(lines[i - 1], line, lines[i + 1])
这将打印出第2行&#39;第3行&#39;第3行&#39;的前一行,当前行和下一行。和&#39;第4行&#39;并忽略&#39;第1行&#39;和&#39;第5行&#39;没有上一行和下一行要打印。
此外,使用with
作为使用隐式close
打开资源的惯用方法。
答案 1 :(得分:-1)
使用if
声明:
data = open('file.txt', "r")
searchlines = data.readlines()
lines_len = len(searchlines)
for q_numb, line in enumerate(searchlines):
if ('line 4') in line && 0 < q_numb < lines_len: #Here
prev_line = searchlines[q_numb - 1]
print ('"line 4" is found:',line, 'previous of "line 4" is:',prev_line)
break
data.close()