我有以下循环:
i = 0
with open(decrypted_file, "r") as text_file:
while len(introduction_point) < 3:
for line in itertools.islice(text_file, i, i+1):
introduction_point.append(str.split(''.join(line))[1])
i = i + 15
text_file.close()
我要做的是选择第1行,第16行和第31行,然后将这些行中的数据添加到数组列表中,但是它会卡在第{2}行{/ 1}}上>
i = 15
我如何才能将for line in itertools.islice(text_file, i, i+1):
用于此目的,或者我必须每次关闭文件并重新打开它,因为这似乎可以正常工作,浪费资源。
答案 0 :(得分:2)
你不能通过递增i
来做你想做的事,不。 islice()
对象仅创建一次,之后不会查询i
。添加到i
整数并不会改变循环将处理的行。
您需要使用步长:
for line in itertools.islice(text_file, 0, 31, 15):
现在使用第一行,第16行和第31行,因为islice()
一次跨过第15行。
请注意,text_file.close()
行完全是冗余的,with
语句在块完成时已经向文件发出信号,文件已经闭合。
如果你需要一组不同的不的行,请不要使用islice()
;使用enumerate()
并测试行号是否匹配:
for lineno, line in enumerate(text_file):
if lineno not in {0, 15, 17, 31, 45}:
# not a line we are interested in, skip
continue
# rest of your loop