2017-08-28 8 views
0

私は以下の内容のinput.txtファイルを持っています。txtファイルとinput()関数を持つpython stdin

3 
4 5 

私は、コマンドラインで次のコマンドを使用して標準入力としてこれを使用したいです。 a.pyスクリプトで

python a.py < input.txt 

、私はinput()機能を使ってラインで入力行を読み込むしようとしています。私はstdinを読むためのより良い方法があることを知っていますが、私はinput()関数を使用する必要があります。

line1 = input() 
line2 = input() 

の単純なアプローチは動作しませんでした。次のエラーメッセージが表示されます。

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

答えて

1

そうすれば、OKですそれは動作します:

read = input() 
print(read) 

あなただけ1行を読んでいます。 input() DOCから

関数は、次に、入力から行を読み込む(改行ストリッピング)ストリング に変換し、それを返します。ファイルが空白行で終わっていない場合は、同じであるか、何を、ファイルの最後の空白以外の行はend of line文字で終わらないことを意味

、あなたはexceptions.SyntaxErrorを取得し、最後の行は意志読むことはできません。

+0

のための私の答えは、私は詳細を追加しました。 2行目を読み込もうとするとエラーになります。 – zcadqe

+0

@hwchung私は私の答えを編集しました。あなたが 'input()' funcに固執しなければならない理由は何ですか?状況を見るか、ファイルの最後に終わりの行を追加するか、スクリプトの標準入力として渡したファイルの内容を読み込むために 'input()'以外の方法を使わなければなりません。いくつかの他のオプションがあります、あなたがそれらに興味があるかどうか私に知らせてください;) –

+0

答えをありがとう。 input()関数に固執したいのは、HackerRankのウェブサイトで使用されているコードをデバッグすることです。そこでinput()関数を使用して入力を受け取ります。ローカルマシンを使用してデバッグするほうがはるかに簡単です。だから私は入力をローカルに取るためのコードを書こうとしています。ファイルの終わりにエンド・ラインを追加するとどういう意味ですか? – zcadqe

0

あなたはHackerRankについて言及しています。私の古い提出のいくつかを見て、私はsys.stdinの代わりにinputをあきらめたと思う。 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))) 
関連する問題