2014/05/26

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

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

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 で得られる文字列は、入力された文字列から自動的に改行文字を取り除いてくれます。

ちなみに Python3 ではこの 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つの文字列として取得します。

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

以上です。

余談ですが、指定した回数だけ入力を受け付けたいときなんかは
[raw_input() for _ in range(3)]
などと書くと、Pythonらしく(?)書くことができたりします。


参考
27.1. sys — System-specific parameters and functions — Python公式ドキュメント

1 件のコメント:

Frederick Guyton さんのコメント...
このコメントはブログの管理者によって削除されました。