Chr*_* B. 4 python file-io loops
仔细阅读fileinput上的文档,但我在某个地方犯了一个基本错误,我希望有人可以指出我的错误.
循环遍历文件中的列表:
finput = fileinput.input('file.txt')
for line in finput:
// do something
finput.next()
else:
finput.close()
Run Code Online (Sandbox Code Playgroud)
它会抛出第二个循环
raise RuntimeError, "input() already active"
Run Code Online (Sandbox Code Playgroud)
思想.next()是移动到第二行的正确功能
当您尝试循环返回的同一文件的重新打开的实例时,如果前一个返回的fileinput.input实例fileinput.input仍未显式耗尽或关闭,则会引发错误.因此,多个实例实例fileinput.input不能同时使用.
该实例将用作此模块的函数的全局状态,并且还将在迭代期间返回使用.
import fileinput
finput = fileinput.input('abc1')
finput.next()
finput = fileinput.input('abc1')
finput.next()
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
您可以使用fileinput.FileInput一次使用多个实例.这段代码工作正常:
import fileinput
finput = fileinput.FileInput('abc1')
finput.next()
finput = fileinput.FileInput('abc1')
finput.next()
Run Code Online (Sandbox Code Playgroud)
请注意,正如@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.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6481 次 |
| 最近记录: |