3

text.txt ファイルの 2 行目を読み取ろうとしています。

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()iterableから 2 行目を取得するには、2.next()回呼び出すだけです。

finput = fileinput.input([os.path.expandvars("$MYPATH/text.txt")])
finput.next()  # skip first line
mydate = finput.next()  # store second line.

itertools.islice()この関数を使用して、2 行目だけを選択することもできます。

import itertools

finput = fileinput.input([os.path.expandvars("$MYPATH/text.txt")])
mydate = itertools.islice(finput.next(), 1, 2).next()  # store second line.

どちらの方法でも、入力から読み取られる行は 2 行までです。

この.input()関数は、他の関数が操作するグローバル シングルトン オブジェクトを返します。一度に実行できるインスタンス1 つ だけです。新しいオブジェクトを開く前に呼び出したことを確認してください。fileinput.input()fileinput.close()input()

fileinput.FileInput()複数のインスタンスを作成するには、代わりにクラスを使用する必要があります。

于 2012-12-10T11:29:22.883 に答える
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)であり、あなたの例ではそのエラーは発生しません。すべてを消費していないため、そのエラーが表示されます入力を再度開く前の行。

于 2012-12-10T11:46:36.173 に答える