ユーニックス総合研究所

  • home
  • archives
  • python-user-input

Pythonでユーザー入力を処理する方法5選

  • 作成日: 2023-06-15
  • 更新日: 2023-12-24
  • カテゴリ: Python

Pythonでユーザー入力を処理する

Pythonでユーザーからの入力を処理したい場合はinput()関数などを使います。
この記事ではPythonでユーザー入力を処理する方法を解説します。

関連記事
Djangoでオブジェクトを一括作成・更新【bulk_create, bulk_update】
DjangoのModel.objects.filter()の使い方【QuerySet】
Djangoのmodelのcreate()の使い方【Python】
Django入門: ルートの設定 ~ 簡単な一行掲示板アプリを作る その4【Windows10】
NumPyのappend()の使い方: 配列の末尾に要素を追加
Numpyのarangeの使い方: 指定範囲の数列を生成する
Python3でYoutube Data APIを使ってキーワード検索する
PythonからC言語(my.puts)を呼び出して実行する

input関数で入力を処理する

input()関数はPythonの組み込み関数です。
標準入力から1行を読み取ります。
1行を読み取るというのは改行が入力されたそこでいったん関数が終了するということです。
input()関数は入力が終了すると返り値として入力された文字列を返します。

input()関数の第1引数には入力の際に表示するプロンプトを指定することができます。
プロンプトは文字列です。

try:  
    text = input('入力してください > ')  
except (KeyboardInterrupt, EOFError):  
    print('入力が中断されました。')  
else:  
    print('入力内容:', text)  

上記のコードを実行すると以下のような結果になります。

入力してください > hello  
入力内容: hello  

input()関数はCtrl + Cなどの割り込みが入力されるとKeyboardInterrupt例外を発生させます。
またCtrl + DやWindowsではCtrl + Zが入力された場合はEOFError例外を発生させます。

これらの例外を処理しておくと質の高い入力処理を行うことができます。
こういった例外が飛んで来たらユーザーが入力を中断した、ということになりますのでその場合はプログラム的にどうするのか決めておく必要があります。
上記のコードではprint('入力が中断されました。')と表示しています。

input()関数の返す入力された文字列は改行は含まれません。

sys.stdinから入力を読み込む

sysモジュールにはstdinというファイルオブジェクトがあります。
これは標準入力を扱うオブジェクトです。
このオブジェクトを使うと標準入力からのユーザー入力を処理できます。

sys.stdin.read()で入力読み込む

sys.stdin.read()関数は標準入力からEOF(End Of File)を検出するまで読み込む関数です。
この関数もCtrl + Cなどの割り込みが発生したらKeyboardInterrupt例外を送出します。
EOFとはファイル終端を表す用語です。余談ですがC言語などではEOFというグローバル定数があります。

import sys  


try:  
    text = sys.stdin.read()  
except KeyboardInterrupt:  
    print('入力が中断されました。')  
else:  
    print(text)  
hige  
hoge  
^Z  
hige  
hoge  

上記のコードを実行すると入力待ちになり、何か入力してからCtrl + DCtrl + ZなどでEOFを入力すると入力が終了します。
入力されたテキストは返り値としてtextに保存されます。

stdinの入力はユーザー入力だけでなく、コマンドラインのパイプで繋げられた入力なども読み取ることができます。
パイプとはコマンドとコマンドを標準入力と標準出力で繋げることを言います。
コマンドラインとはコマンドプロンプトやBashなどで入力されるコマンドのリストのことです。

sys.stdin.read(1)で1文字読み込む

sys.stdin.read()は引数に読み込むサイズを指定できます。
read(1)にすると1文字読み込んで入力を完了するようになります。
最初の1文字以外の入力文字列はファイルオブジェクトに残ったままです。

import sys  


try:  
    text = sys.stdin.read(1)  
except KeyboardInterrupt:  
    print('入力が中断されました。')  
else:  
    print(text)  
123  
1  

sys.stdin.readline()で一行読み込む

sys.stdin.readline()関数は標準入力から1行読み込む関数です。

import sys  


try:  
    text = sys.stdin.readline()  
except KeyboardInterrupt:  
    print('入力が中断されました。')  
else:  
    print(text)  
hige  
hige  

上記のコードを実行すると入力待ちになり、テキストを入力してエンターキーを押すと入力が完了して画面に入力した文字列が表示されます。

sys.stdin.readlines()で複数行読み込む

sys.stdin.readlines()関数は標準入力から複数行読み込む関数です。

import sys  


try:  
    text = sys.stdin.readlines()  
except KeyboardInterrupt:  
    print('入力が中断されました。')  
else:  
    print(text)  
hige  
hoge  
^Z  
['hige\n', 'hoge\n']  

この関数は入力された複数行の文字列をパースしてリストにしてから返します。
リスト内の文字列には改行が付加された状態です。
EOFを入力すると入力が完了します。
sys.stdin.readline()もこの関数もそうですが、これらの関数もコマンドラインのパイプなどの入力を読み取れます。

おわりに

今回はPythonでユーザー入力を処理する方法を解説しました。
なにか参考になれば幸いです