我正在尝试使用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:这是我正在处理的巨大文件和函数的简单示例。
答案 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
模式一样。