2012-12-10 52 views
2

我試圖在文件──test.txt文件讀取第二行:「輸入()已經有效」是什麼意思在Python文件輸入模塊?

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

要獲得從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()實例。確保您在打開新的input()對象之前調用fileinput.close()

您應該使用fileinput.FileInput()類來創建多個實例。

+0

該文件真的很大,我只需要閱讀第二行。你的建議是否適合這個? – alwbtc

+0

我嘗試了第一種方法,但仍然得到「input()已激活」的錯誤。 – alwbtc

+0

@alwbtc:這兩種方法只能讀取前兩行(使用讀取緩衝區)。這兩種方法都不會讀取整個文件。 –

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,2010年4月16日,13:57:41),它不會引發你的錯誤,因爲你的錯誤會出現,因爲你在重新打開輸入之前,不要使用所有行。

+0

我不想消耗所有行,文本文件真的很大 – alwbtc

+0

我說只有2個第一行從文件中讀取,處理總是最多2行,無論文件的長度如何 – mihaicc

相關問題