阅读关于fileinput的文档,但我在某处发生了一个基本错误,我希望有人可以指出我的错误。
循环浏览文件中的列表:
finput = fileinput.input('file.txt')
for line in finput:
// do something
finput.next()
else:
finput.close()
在第二个循环中抛出
raise RuntimeError, "input() already active"
思想.next()是移动到第二行的正确功能
答案 0 :(得分:5)
当您尝试循环fileinput.input
返回的同一文件的重新打开的实例时,会引发错误,而fileinput.input
返回的上一个实例仍未显式耗尽或关闭。因此,fileinput.input
的多个实例实例不能同时使用。
该实例将用作此功能的全局状态 模块,并在迭代期间返回使用。
import fileinput
finput = fileinput.input('abc1')
finput.next()
finput = fileinput.input('abc1')
finput.next()
<强>输出:强>
Traceback (most recent call last):
File "so.py", line 5, in <module>
finput = fileinput.input('abc1')
File "/usr/lib/python2.7/fileinput.py", line 101, in input
raise RuntimeError, "input() already active"
RuntimeError: input() already active
您可以使用fileinput.FileInput
一次使用多个实例。这段代码工作正常:
import fileinput
finput = fileinput.FileInput('abc1')
finput.next()
finput = fileinput.FileInput('abc1')
finput.next()
请注意,正如@Tim Pietzcker在他的回答中已经指出的那样,fileinput
实例上的for循环已经一次返回一行(在代码中,变量line
是实际行),因此,那里不需要.next
次呼叫。当文件对象耗尽时,在该循环内调用.next
可能会引发StopIteration
错误。
import fileinput
finput = fileinput.input('abc1')
for line in finput:
print line, #current line returned by the for-loop
print finput.next() #Fetch the next line manually.
答案 1 :(得分:0)
for
循环已经逐行迭代,因此调用.next()
会导致问题。只需删除该行。
finput = fileinput.input('file.txt')
for line in finput:
// do something
finput.close()