2017-08-28 230 views
0

我有一個input.txt文件,其中包含以下內容。python標準輸入與txt文件和輸入()函數

3 
4 5 

我想通過在命令行中使用以下命令將其用作標準輸入。

python a.py < input.txt 

在a.py劇本,我想讀通過input()功能線的輸入線。我知道有更好的方法來讀取stdin,但我需要使用input()函數。

line1 = input() 
line2 = input() 

天真的方法沒有奏效。我收到以下錯誤消息。

File "<string>", line 1 
    4 5 
    ^
SyntaxError: unexpected EOF while parsing 

回答

1

這樣一來就可以了,它的工作原理:

read = input() 
print(read) 

,但你只是讀一行。

input() DOC:

然後該功能可以讀取從輸入的線,將其轉換成字符串 (剝離的後換行),並返回。

這意味着,如果該文件不以一個空行結束了,或者有什麼不一樣,文件的最後一個非空行不以end of line字符結尾,你會得到exceptions.SyntaxError和最後一行不被閱讀。

+0

我增加了更多的細節。當我嘗試閱讀第二行時出現錯誤。 – zcadqe

+0

@hwchung我編輯了我的答案。爲什麼你必須堅持使用'input()'func?正如我看到的情況,或者在文件的末尾添加了一行末尾行,或者除了使用input()來讀取作爲腳本的標準輸入傳遞的文件的內容之外,您還必須使用其他方法。存在其他幾個選項,只是讓我知道,如果你對他們感興趣;) –

+0

感謝您的答案。我想堅持使用input()函數,因爲我試圖做的是調試我在HackerRank網站中使用的代碼。在那裏我使用input()函數來接受輸入。使用本地機器進行調試要容易得多。所以我正在嘗試編寫一個用於本地輸入的代碼。在我的文件末尾添加最後一行代表什麼意思? – zcadqe

0

你提到HackerRank;看看我的一些陳舊意見,我認爲我選擇放棄input來代替sys.stdin操縱。 input()next(sys.stdin)非常相似,但後者將處理EOF就好了。

舉例來說,我的答案https://www.hackerrank.com/challenges/maximize-it/

import sys 
import itertools 

# next(sys.stdin) is functionally identical to input() here 
nK, M = (int(n) for n in next(sys.stdin).split()) 

# but I can also iterate over it 
K = [[int(n) for n in line.split()][1:] for line in sys.stdin] 

print(max(sum(x**2 for x in combo) % M for combo in itertools.product(*K)))