针对问题的新变体进行了更新
您将 2 行分配给 b,因为您通过将 2 作为 end 参数的值来要求 islice() 给您 2 行。你可以这样做:
with open('test.txt') as f:
for line in f:
if 'Ball' in line:
var1 = ''.join(islice(f, 1))
var2 = ''.join(islice(f, 1))
var3 = ''.join(islice(f, 1))
使用islice() 一次使用一个 行。不过,最好使用next():
var1 = next(f)
var2 = next(f)
var3 = next(f)
更简洁的方式,还是用islice(),是这样的:
from itertools import islice
with open('test.txt') as f:
for line in f:
if 'Ball' in line:
var1, var2, var3 = islice(f, 3)
读取接下来的 3 行并将它们分配给变量 var1、var2 和 var3。
原始问题的原始答案
问题是第一个 for 循环在进入第二个 for 循环之前消耗了整个文件。第二个循环立即终止,因为所有行都已被读取。
尝试在分配给a 后的第一个循环中添加break。
from itertools import islice
with open('test.txt') as f:
for line in f:
if 'Ball' in line:
a = (''.join(islice(f, 1)))
break
for line in f:
if 'Bat' in line:
b = (''.join(islice(f, 2)))
一旦找到包含Ball 的行之后的行,break 将终止第一个循环。然后第二个 for 循环可以继续处理下一行的文件,如果有的话。
如果您只需要Bat 之后的两行中的第二行,您可以将start 传递给islice():
for line in f:
if 'Bat' in line:
b = islice(f, 1, 2)
这是可行的,因为默认开始是 0,所以指定 1 会跳过第一行。