itertools islice无法选择多行?

时间:2014-07-13 16:21:26

标签: python itertools

我有以下循环:

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): 用于此目的,或者我必须每次关闭文件并重新打开它,因为这似乎可以正常工作,浪费资源。

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