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

2024-04-26 20:51:52 发布

您现在位置:Python中文网/ 问答频道 /正文

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

line 0
line 1
line 2 
line 3
line 4

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

^{pr2}$

现在我的问题是在第一次迭代之后,line被设置为line2,所以在第二次迭代中,这条线被设置为line3。我希望在第二次迭代中将line设置为line1。我试过line = line,但没用。 您能告诉我我如何重置由于^{而改变的line上的迭代索引吗

附言:这是一个简单的例子,我正在处理一个巨大的文件和函数。在


Tags: 数据信息编辑forinputlinefilename中将
2条回答

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

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

好的,您可能希望从上一个索引开始的答案不会被此尝试捕获。在

无法重置迭代器,但在开始循环之前,无法阻止您执行某些处理:

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行读入列表中。然后它基于line2更新line1,并打印所有这些文件。然后它继续使用普通循环打印文件的其余部分。在

对于您的示例,输出将是:

^{pr2}$

注意,如果要修改文件本身的第一行,而不是只显示它,则需要将整个文件写入一个新文件。写入文件的工作方式与在字处理器中不同,当添加一行或一个字符时,所有行都会下移。它就像你在overwrite模式下工作。在

相关问题 更多 >