Python Tips: 標準入力から文字列を取得したい

Python 2.x で入力を取得する方法をご紹介します。

Python では、入力を取得する方法が大きく分けて 2 種類あります。

  • raw_input()
  • sys.stdin.readline() ```` readlines() ```` read()

以下、それぞれについて順に見ていきます。

raw_input()

raw_input() はコマンドラインからの入力を取得するための関数です。組み込みの関数なので、ライブラリを import しなくてもそのまま使えます。

input_line1 = raw_input()
print input_line1 + " is written"
# => 入力された文字列 is written

raw_input() で得られる文字列は、入力された文字列から自動的に改行文字を取り除いてくれます。

ちなみに Python 3 ではこの raw_input() は廃止され、代わりに input() という別の名前の組み込み関数が用意されています。

sys.stdin.readline() ```` readlines() ```` read()

sys.stdin.readline() のシリーズは、 raw_input() よりも広い用途で標準入力を取得するための関数群です。

sys ライブラリを import することで使えるようになります。

readline() ```` readlines() ```` read() のちがいを以下順に見ていきます。

import sys
input_line2 = sys.stdin.readline()
print input_line2 + " is writen"
# => 入力された文字列
#  is written

readline() は標準入力から1行取得するための関数です。 raw_input() とのちがいは、 raw_input() が改行文字を自動的に削除するのに対し、 readline() は標準入力に与えられた内容をそのまま取得してくる点です。

input_lines1 = sys.stdin.readlines()
print input_lines1
# => 入力された文字列を1行ずつ格納したリスト

readlines() は標準入力から複数行取得するための関数です。戻り値はリストで、入力された文字列が1行ずつ要素として格納されています。こちらも改行文字の自動削除はありません。

input_lines2 = sys.stdin.read()
print input_lines2
# => 入力された文字列

read() は標準入力から複数行取得するための関数です。 readlines() が結果を行単位で分割してリストで返すのに対して、 read() は結果をそのまま1つの文字列として取得します。

それぞれ少しずつ挙動がちがうので、用途にあわせて使い分けるとよいかと思います。

以上です。

余談ですが、指定した回数だけ入力を受け付けたいときなんかは

[raw_input() for _ in range(3)]

などと書くと Python らしく(?)書くことができたりします。

参考