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 を中心に、プログラミング教育に情熱を注いでいます。初心者が楽しく学べる環境作りを目指しています。
著者の詳細を見る →