我正在尝试在text.txt文件中读取第二行:
import fileinput
x = 0
for line in fileinput.input([os.path.expandvars("$MYPATH/text.txt")]):
if x < 3:
x += 1
if x == 2:
mydate = line
fileinput.close()
print "mydate : ", mydate
但是我收到了一个错误:
Traceback (most recent call last):
File "/tmp/tmpT8RvF_.py", line 4, in <module>
for line in fileinput.input([os.path.expandvars("$MYPATH/text.txt")]):
File "/usr/lib64/python2.6/fileinput.py", line 102, in input
raise RuntimeError, "input() already active"
RuntimeError: input() already active
上面有什么问题?
答案 0 :(得分:4)
要获取fileinput.input()
可迭代的第二行,只需拨打.next()
两次:
finput = fileinput.input([os.path.expandvars("$MYPATH/text.txt")])
finput.next() # skip first line
mydate = finput.next() # store second line.
您还可以使用itertools.islice()
function仅选择第二行:
import itertools
finput = fileinput.input([os.path.expandvars("$MYPATH/text.txt")])
mydate = itertools.islice(finput.next(), 1, 2).next() # store second line.
两种方法都确保从输入中读取的行数不超过两行。
.input()
函数返回一个全局单例对象,其他函数操作。您一次只能运行一个 fileinput.input()
实例 。确保在打开新的fileinput.close()
对象之前调用input()
。
您应该使用fileinput.FileInput()
类来创建多个实例。
答案 1 :(得分:1)
python方式是:
with open('text.txt', 'r') as file:
file.next() #as Martjin stated in his response, skips 1st line
mydate = file.next()
在此示例中,只从文件中读取2行,并自动关闭。
对于您的确切问题: 我的python是Python 2.6.5(r265:79063,2010年4月16日,13:57:41)并且它没有为你的例子引发错误。这个错误会出现,因为你在重新打开之前没有消耗掉所有的行输入。