3

我正在尝试读取 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

上面有什么问题?

4

2 回答 2

5

要从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()函数仅选择第二行:

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()该类来创建多个实例。

于 2012-12-10T11:29:22.883 回答
1

蟒蛇的方式是:

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, Apr 16 2010, 13:57:41) 并且它不会为您的示例引发该错误。该错误会出现因为您没有消耗所有重新打开输入之前的行。

于 2012-12-10T11:46:36.173 回答