使用next()Python后重置迭代索引

时间:2015-09-01 06:27:09

标签: python file iteration next

我正在尝试使用fileinput.input(filename, inplace=1)编辑文本文件 文本文件有5行:

line 0
line 1
line 2 
line 3
line 4

我希望根据line 1中的信息更改line 2的数据。 所以我使用for循环

infile = fileinput.input(filename, inplace=1)
for line in infile:
 if(line2Data):
   #do something on line1
   print line,
 else:
   line1=next(infile)
   line2=next(infile) 
   #do something with line2

现在我的问题是在第一次迭代后line被设置为line2所以在第二次迭代中,该行被设置为line3。我想在第二次迭代中将行设置为line1。我试过了line = line但它不起作用。 你能否告诉我如何重置line上的迭代索引,该索引因next而被更改

PS:这是我正在处理的巨大文件和函数的简单示例。

2 个答案:

答案 0 :(得分:0)

据我所知(并没有太多),重置迭代器是没有办法的。这个SO question可能很有用。既然你说文件很大,我能想到的只是处理部分数据。在nosklos回答SO question之后,我会尝试这样的事情(但这只是第一次猜测):

while True:
    for line in open('really_big_file.dat')
        process_data(line)
        if some_condition==True:
            break

好的,您尝试从前一个索引开始的答案不会被此尝试捕获。

答案 1 :(得分:0)

没有办法重置迭代器,但在开始循环之前没有什么能阻止你做一些处理:

infile = fileinput.input("foo.txt")

first_lines = [next(infile) for x in range(3)]
first_lines[1] = first_lines[1].strip() + " this is line2 > " + first_lines[2]
print "\n".join(first_lines)

for line in infile:
    print line

这使用next()将前3行读入列表。然后它会根据line1更新line2并打印所有这些内容。然后它继续使用正常循环打印文件的其余部分。

对于您的样本,输出将是:

line 0

line 1 this is line2 > line 2 

line 2 

line 3

line 4

注意,如果您尝试修改文件本身的第一行,而不是仅显示它,则需要将整个文件写入新文件。写入文件不像在Word处理器中那样工作,其中所有行在添加行或字符时向下移动。它的工作方式就像您处于overwrite模式一样。