Pythonの標準入力(input)とは?使い方を基礎から解説
こんにちは、とまだです。
Pythonでプログラムを書いていて、 「ユーザーからの入力をどう受け取ればいいんだろう?」 と悩んだことはありませんか?
実は、Pythonには標準入力という仕組みがあり、 これを使えば簡単に外部からデータを受け取れます。
今回は、初心者の方でもすぐに使える標準入力の基本から、 実務で役立つ応用的な使い方まで解説していきます。
標準入力とは?
標準入力を一言で説明すると、 「プログラムが外部からデータを受け取る入り口」です。
身近な例で言えば、 レストランの注文窓口のようなものですね。
お客さん(ユーザー)が注文(データ)を伝えると、 厨房(プログラム)がそれを受け取って処理する。 そんなイメージです。
プログラムの3つの窓口
実は、プログラムには3つの基本的な窓口があります。
これらの窓口を通じて、外の世界とやり取りをしています。
- 標準入力(stdin):データを受け取る窓口
- 標準出力(stdout):結果を出力する窓口
- 標準エラー出力(stderr):エラーを知らせる窓口
今回は、この中の標準入力に焦点を当てて見ていきましょう。
input()関数の基本
Pythonで標準入力を扱う最も簡単な方法は、
input()関数を使うことです。
この関数を呼ぶと、プログラムは一時停止して、 ユーザーの入力を待ちます。
シンプルな使い方
まずは基本的な使い方から見てみましょう。
# ユーザーからの入力を受け取る
user_input = input()
print("入力された内容:", user_input)
このコードを実行すると、カーソルが点滅して入力待ち状態になります。 何か文字を入力してEnterキーを押すと、その内容が表示されます。
注意点:すべて文字列として扱われる
input()関数には重要な特徴があります。
それは、受け取った内容がすべて文字列になることです。
たとえば、数字の「123」を入力しても、 プログラム内では文字列の「"123"」として扱われます。
# 数値を入力してもらう想定
number = input("数字を入力してください: ")
print(type(number)) # <class 'str'> と表示される
数値として計算したい場合は、
int()やfloat()で変換する必要があります。
実践的なコード例
それでは、実際に使えるコード例を見てみましょう。
ユーザーの名前を聞いて、挨拶をするプログラムです。
def greeting_program():
print("お名前を教えてください。")
name = input()
# 入力値の前後の空白を削除
name = name.strip()
if name:
print(f"こんにちは、{name}さん!")
else:
print("名前が入力されませんでした。")
if __name__ == "__main__":
greeting_program()
このプログラムのポイントは、
strip()メソッドで余分な空白を削除していることです。
ユーザーが誤ってスペースを入力しても、 きれいに整形してから処理できます。
複数行の入力を扱う方法
一行だけでなく、複数行の入力を扱いたいときもありますよね。
そんなときはsys.stdinを使うと便利です。
sys.stdinの基本的な使い方
sys.stdinは、ファイルのように扱えるオブジェクトです。
以下のように使います。
import sys
print("複数行の入力をどうぞ(Ctrl+Dで終了)")
for line in sys.stdin:
# 各行を処理
cleaned_line = line.strip()
print(f"受け取った行: {cleaned_line}")
このコードは、入力が終わるまで行を読み続けます。 終了するには、Ctrl+D(WindowsではCtrl+Z)を押します。
実用例:CSVデータの処理
実務では、CSVデータを処理することがよくあります。
標準入力を使えば、柔軟にデータを受け取れます。
import sys
def process_csv():
print("CSVデータを入力してください")
for line in sys.stdin:
# 改行を除去してカンマで分割
line = line.strip()
if not line:
continue
columns = line.split(",")
# 各列を処理(例:2列目を大文字に)
if len(columns) >= 2:
columns[1] = columns[1].upper()
print(",".join(columns))
if __name__ == "__main__":
process_csv()
このプログラムは、CSVの2列目を大文字に変換します。 パイプを使って他のプログラムと連携することも可能です。
エラー処理の重要性
ユーザーからの入力は予測できないことが多いです。
そのため、適切なエラー処理が欠かせません。
数値入力の検証
数値を期待しているのに文字が入力される。 よくあるケースですよね。
以下のように対処します。
def get_number():
while True:
user_input = input("数値を入力してください: ")
try:
# 数値に変換を試みる
number = float(user_input)
return number
except ValueError:
print("数値として認識できませんでした。")
print("もう一度入力してください。")
# 使用例
result = get_number()
print(f"入力された数値: {result}")
try-except文を使うことで、
エラーが発生しても処理を続けられます。
ユーザーに再入力を促すことで、 より使いやすいプログラムになります。
標準入力の活用シーン
標準入力は、さまざまな場面で活躍します。
実務でよく使われるパターンを紹介しましょう。
コマンドラインツールとの連携
Linuxなどでは、パイプ(|)を使って プログラム同士を連携させることができます。
# ログファイルから特定の行を抽出してPythonで処理
cat server.log | grep ERROR | python process_errors.py
このような使い方をすれば、 既存のツールと組み合わせて強力な処理が可能です。
バッチ処理での活用
大量のデータを処理する場合も、 標準入力は効率的です。
メモリに全データを載せずに、 一行ずつ処理できるからです。
import sys
def batch_process():
line_count = 0
error_count = 0
for line in sys.stdin:
line_count += 1
# エラー行をカウント
if "ERROR" in line:
error_count += 1
print(f"総行数: {line_count}")
print(f"エラー行数: {error_count}")
このように、巨大なファイルでも メモリ効率よく処理できます。
よくある疑問と解決策
標準入力を使い始めると、 いくつか疑問が出てくることでしょう。
よくある質問をまとめました。
Q: コマンドライン引数との違いは?
コマンドライン引数は起動時に渡すデータ、 標準入力は実行中に受け取るデータです。
用途に応じて使い分けましょう。
- コマンドライン引数:設定値やオプション向き
- 標準入力:大量データや対話的な入力向き
Q: ファイル読み込みとどちらを使うべき?
固定のファイルを処理するならopen()、
柔軟にデータソースを変えたいなら標準入力です。
両方に対応したい場合は、 以下のような実装がおすすめです。
import sys
def process_data(source=None):
if source:
# ファイルから読み込み
with open(source, 'r') as f:
lines = f
else:
# 標準入力から読み込み
lines = sys.stdin
for line in lines:
# 共通の処理
print(line.strip().upper())
Q: 文字化けが起きるときは?
WindowsとLinuxで文字コードが異なることがあります。
環境に応じた対処が必要です。
import sys
import codecs
# Windows環境でUTF-8を扱う場合
if sys.platform == "win32":
sys.stdin = codecs.getreader('utf-8')(sys.stdin.buffer)
実装時の注意点
標準入力を使う際は、 いくつか気をつけるべき点があります。
入力待ちによる処理の停止
input()を呼ぶと、
入力があるまでプログラムが止まります。
この特性を理解して、 適切な場所で使うことが大切です。
バッファリングの影響
システムは効率化のため、 入力をまとめて処理することがあります。
リアルタイム性が必要な場合は、 フラッシュ処理を検討しましょう。
セキュリティへの配慮
ユーザー入力は信頼できません。
特に、入力値をそのままコマンドとして実行したり、 SQLクエリに組み込んだりするのは危険です。
必ず検証とサニタイズを行いましょう。
まとめ
Pythonの標準入力について、 基本から実践的な使い方まで見てきました。
input()関数でシンプルに始められますし、
sys.stdinを使えば高度な処理も可能です。
重要なのは、用途に応じて適切な方法を選ぶことです。
対話的なプログラムならinput()、
大量データの処理ならsys.stdinという具合に、
使い分けができるようになれば完璧です。
エラー処理も忘れずに実装して、 堅牢なプログラムを作っていきましょう。
標準入力を使いこなせるようになれば、 他のツールとの連携も含めて、 プログラミングの幅が大きく広がるはずです。
著者について

とまだ
フルスタックエンジニア
Learning Next の創設者。Ruby on Rails と React を中心に、プログラミング教育に情熱を注いでいます。初心者が楽しく学べる環境作りを目指しています。
著者の詳細を見る →