Python モジュールと標準ライブラリ
このトピックを終えると
import の動作原理を理解し、Python 標準ライブラリの主要なモジュールを活用でき、pip を使って外部パッケージをインストールおよび管理できるようになります。
モジュールとは
モジュールは、Python コードが格納された .py ファイル 1 つです。関数、クラス、変数をまとめて、別のファイルから import して使用できます。
# math_utils.pydef add(a, b): return a + b
def multiply(a, b): return a * b
PI = 3.14159# main.pyimport math_utils
print(math_utils.add(3, 5)) # 8print(math_utils.multiply(4, 7)) # 28print(math_utils.PI) # 3.14159import math_utils を実行すると、Python は同じディレクトリから math_utils.py を見つけて実行し、その中の関数/変数を math_utils.名前 の形式で使えるようにします。
import のさまざまな方法
# 1. モジュール全体をインポートimport osos.getcwd() # 現在のディレクトリ
# 2. 特定の関数だけをインポートfrom os.path import join, existsjoin("/home", "user") # '/home/user' — os.path.join の代わりに join として使用可能
# 3. エイリアス (別名) を付けるimport numpy as npnp.array([1, 2, 3]) # numpy.array の代わりに np.array
# 4. すべてをインポート (非推奨)from os import * # 名前の衝突のリスク — どこから来たのか追跡不可from X import * は便利ですが、名前がどこから来たのか分からなくなるため、大規模なプロジェクトでは使用しません。明示的なインポートが常に優れています。
標準ライブラリ — インストールなしで使えるツール
Python をインストールすると、数百のモジュール が一緒にインストールされます。これが標準ライブラリ (Standard Library) です。「バッテリーが内蔵されている」という Python の哲学を反映しています。
os — オペレーティングシステムとの対話
import os
# 現在のディレクトリprint(os.getcwd()) # /home/user/project
# ファイルリストfiles = os.listdir(".")print(files) # ['main.py', 'data', 'output']
# ディレクトリの作成os.makedirs("output/reports", exist_ok=True)
# 環境変数db_host = os.environ.get("DB_HOST", "localhost")os.path — パスの処理
import os.path
path = "/home/user/data/report.csv"
os.path.basename(path) # 'report.csv'os.path.dirname(path) # '/home/user/data'os.path.splitext(path) # ('/home/user/data/report', '.csv')os.path.exists(path) # True or Falseos.path.join("data", "output", "file.txt") # 'data/output/file.txt'json — JSON データの処理
import json
# Python オブジェクト → JSON 文字列data = {"name": "Hoon", "scores": [90, 85, 95]}json_str = json.dumps(data, ensure_ascii=False, indent=2)print(json_str)
# JSON 文字列 → Python オブジェクトparsed = json.loads(json_str)print(parsed["name"]) # Hoon
# ファイルに保存/読み込みwith open("data.json", "w", encoding="utf-8") as f: json.dump(data, f, ensure_ascii=False, indent=2)
with open("data.json", "r", encoding="utf-8") as f: loaded = json.load(f)ensure_ascii=False を指定しないと、韓国語が \ud55c\uae00 のようにエスケープされて保存されます。
datetime — 日付と時間
from datetime import datetime, timedelta
# 現在の時刻now = datetime.now()print(now) # 2026-07-03 14:30:00.123456
# フォーマット変換print(now.strftime("%Y-%m-%d")) # 2026-07-03print(now.strftime("%Y/%m/%d %H:%M")) # 2026/07/03 14:30
# 文字列 → datetimedate = datetime.strptime("2026-07-03", "%Y-%m-%d")
# 日付の計算tomorrow = now + timedelta(days=1)week_ago = now - timedelta(weeks=1)diff = datetime(2026, 12, 31) - nowprint(f"D-{diff.days}") # D-181collections — 高度なデータ構造
from collections import Counter, defaultdict
# Counter — 頻度をカウントwords = ["apple", "banana", "apple", "cherry", "banana", "apple"]count = Counter(words)print(count) # Counter({'apple': 3, 'banana': 2, 'cherry': 1})print(count.most_common(2)) # [('apple', 3), ('banana', 2)]
# defaultdict — デフォルト値を持つ辞書scores = defaultdict(list)scores["math"].append(90)scores["math"].append(85)scores["english"].append(92)print(dict(scores)) # {'math': [90, 85], 'english': [92]}random — 乱数生成
import random
random.randint(1, 100) # 1〜100 の間の整数random.choice(["A", "B", "C"]) # リストから 1 つ選択random.shuffle([1, 2, 3, 4]) # リストをその場でシャッフルrandom.sample(range(100), 5) # 0〜99 から 5 つを重複なしで選択pip — 外部パッケージのインストール
標準ライブラリにない機能は、外部パッケージとしてインストールします。
# インストールpip install requestspip install pandas numpy matplotlib
# バージョンを指定してインストールpip install requests==2.31.0
# アップグレードpip install --upgrade requests
# 削除pip uninstall requests
# インストールされたパッケージのリストpip list
# requirements.txt で依存関係を管理pip freeze > requirements.txt # 現在インストールされているパッケージを記録pip install -r requirements.txt # 記録されたパッケージを一括インストールrequirements.txt は、プロジェクトで使用する外部パッケージを記録するファイルです。他の人 (またはサーバー) が同じ環境を再現できます。
__name__ == "__main__" — 実行とインポートの区別
# greet.pydef hello(name): print(f"Hello, {name}!")
if __name__ == "__main__": # このファイルを直接実行した場合のみ実行 hello("World")$ python greet.py # "Hello, World!" を出力# other.pyimport greet # hello("World") は実行されないgreet.hello("Python") # "Hello, Python!" を出力python greet.py で直接実行すると、__name__ が "__main__" になります。別のファイルから import greet でインポートすると、__name__ が "greet" になります。このパターンで、「直接実行時のテストコード」と「モジュールとして使用される時の機能」を分離します。
主要なまとめ
| 概念 | まとめ |
|---|---|
| モジュール | .py ファイル 1 つ = モジュール 1 つ |
import | 別のファイルのコードをインポート |
| 標準ライブラリ | インストールなしで使えるモジュールの集合 (os, json, datetime など) |
pip | 外部パッケージのインストール/管理ツール |
requirements.txt | プロジェクトの依存関係を記録 |
__name__ | 直接実行 vs インポートの区別 |
Python の強みの 1 つは、豊富な標準ライブラリと巨大なサードパーティの生態系 (PyPI には 50 万以上のパッケージ) です。「車輪を再び発明するな」という原則 — 実装する前に、まず標準ライブラリと PyPI を検索する習慣が生産性を高めます。
実践的なパターン — 複数のモジュールを組み合わせる
実際には、1 つのモジュールだけを使用することはあまりありません。複数の標準ライブラリを組み合わせることが一般的です。
import osimport jsonfrom datetime import datetime
def process_data_files(directory): results = [] for filename in os.listdir(directory): if not filename.endswith(".json"): continue filepath = os.path.join(directory, filename) with open(filepath, "r", encoding="utf-8") as f: data = json.load(f) results.append({ "file": filename, "records": len(data), "processed_at": datetime.now().strftime("%Y-%m-%d %H:%M") }) return results
# 出力:# [# {"file": "users.json", "records": 150, "processed_at": "2026-07-03 14:30"},# {"file": "orders.json", "records": 423, "processed_at": "2026-07-03 14:30"}# ]os でファイルを探索し、json で読み込み、datetime で時間を記録 — 3 つのモジュールが自然に組み合わされます。このようなパターンがスクリプト作成の基本です。