概要(format は「見せ方を指定して、値を文字列に埋め込む」ための基本)
format は2つあります。ひとつは文字列のメソッド str.format()(”{}” に値を差し込む)、もうひとつは組み込み関数 format(x, “指定子”)(数値や日付などを指定書式で文字列化)。どちらも「書式指定子(フォーマットミニ言語)」を使って幅・桁数・配置・進数・百分率などを簡潔にコントロールできます。まずは str.format の基本形と、書式指定子のコアを押さえましょう。
# str.format 基本
name, age = "花子", 30
print("名前は{}、年齢は{}歳".format(name, age))
# 組み込み format 基本
x = 1234.567
print(format(x, ",.2f")) # '1,234.57'(3桁区切り+小数2桁)
Pythonstr.format の基本(ここが重要)
位置引数・キーワード引数・インデックス指定
“{}” の順番に値が入ります。同じ値を複数箇所で使うなら番号や名前を付けると読みやすく、順番変更にも強くなります。
# 位置引数(順番どおり)
print("{}さんは{}歳です".format("田中", 28))
# インデックス指定(同じ値の再利用)
print("{0}さんは{1}歳、{0}さんの趣味は{2}".format("田中", 28, "読書"))
# キーワード引数(順序に依存しない)
print("{name}さんは{age}歳".format(name="佐藤", age=30))
Python書式指定子の基本形「{フィールド:書式}」
書式の核は「幅・詰め文字・配置・桁数・型」。最低でも「型」と「精度」を覚えると実務で即使えます。
# 幅と配置(< 左寄せ, ^ 中央, > 右寄せ)。詰め文字は先頭に置く
print("{:_>8}".format("42")) # '______42'
print("{:^10}".format("OK")) # ' OK '
# 数値の桁・型
print("{:.3f}".format(3.14159)) # 小数3桁 '3.142'
print("{:d}".format(255)) # 整数 '255'
print("{:x}".format(255)) # 16進 'ff'
print("{:b}".format(5)) # 2進 '101'
print("{:.2%}".format(0.1234)) # 百分率 '12.34%'
print("{:,}".format(1234567)) # 3桁区切り '1,234,567'
Python辞書・リストから展開(可読性アップ)
複数値を持つ構造から直接埋め込めます。引数に「*辞書」「リスト/タプル」を渡すのがコツです。
user = {"name": "花子", "age": 30}
print("{name}さんは{age}歳".format(**user))
vals = ("田中", 28)
print("{0}さんは{1}歳".format(*vals))
Python文字通りの波括弧は「{{ }}」
テンプレート文中で { と } を表示したい場合は二重にします。
print("式は x = {{a}} + {{b}}") # '式は x = {a} + {b}'
Python組み込み関数 format と f文字列の使い分け(深掘り)
format(x, spec) は「値→文字列」専用の直球
数値の見せ方だけを変えたいときに最短です。型のメソッドを意識しなくて良いのが利点。
n = 1234.56789
print(format(n, ".2f")) # '1234.57'
print(format(n, ",d")) # '1,234'(整数)
Pythonf文字列は「読みやすさ最優先」の現代的スタイル
式をそのまま書け、同じ書式指定が使えます。ロジックの見通しが良く、日常的な出力に最適です。
name, score = "花子", 92.345
print(f"{name} のスコアは {score:.1f}") # '花子 のスコアは 92.3'
print(f"{12345:,}") # '12,345'
Pythonどれを使うべきかの指針
短い式やテンプレートは f文字列、外部テンプレートや再利用には str.format、純粋に数値の表示変換なら format。プロジェクトで統一すると読みやすさが上がります。
よく使う書式のパターン(重要ポイントの深掘り)
幅・詰め・配置で整列
固定幅の表やログ整形で強力です。
print(f"|{'ID':>5}|{'NAME':^10}|{'SCORE':>6}|")
print(f"|{12:>5}|{'tanaka':^10}|{92.3:>6}|")
Python小数の精度、指数、有效数字
用途に応じて f(固定小数)、e(指数)、g(有効数字)を選びます。
x = 1234.56789
print(f"{x:.2f}") # '1234.57'
print(f"{x:.3e}") # '1.235e+03'
print(f"{x:.5g}") # '1234.6'
Python符号と代替表示(#)
符号の表示と 0x/0b などの接頭辞を制御できます。
print(f"{-42:+d}") # '-42'(常に符号)
print(f"{42:+d}") # '+42'
print(f"{255:#x}") # '0xff'
print(f"{10:#b}") # '0b1010'
Python3桁区切り・ゼロ埋め
数値の見せ方で一気に可読性が上がります。
print(f"{1234567:,}") # '1,234,567'
print(f"{42:06d}") # '000042'
Python落とし穴と対策(引数不一致・浮動小数・国際化)
プレースホルダ数と引数数の不一致
足りない・余分があるとエラーになります。テンプレートを変更する際はテストを忘れずに。
# print("{} {}".format(1)) # ValueError(足りない)
Python浮動小数の二進誤差は「表示側で丸める」
内部値は誤差を含むことがあり、見せ方で調整します。金額など厳密さが必要なら Decimal を検討。
x = 2.675
print(f"{x:.2f}") # '2.68'(表示)
Pythonロケールや通貨・日付のフォーマット
format 指定子は便利ですが、通貨記号や言語別ルールは別途ライブラリや仕組みが必要です。要件に応じて設計しましょう。
例題で身につける(定番から一歩先まで)
例題1:テーブル整形(幅・配置・3桁区切り)
rows = [("coffee", 2, 1234.5), ("tea", 1, 98.3), ("sugar", 3, 25.0)]
print(f"|{'ITEM':<10}|{'QTY':>3}|{'PRICE':>10}|")
for name, qty, price in rows:
print(f"|{name:<10}|{qty:>3}|{price:>10,.2f}|")
Python例題2:ログの時刻+メッセージ整形
from datetime import datetime
def log(level: str, msg: str) -> str:
ts = datetime.now().isoformat(timespec="seconds")
return f"[{ts}] {level:<5} {msg}"
print(log("INFO", "started"))
Python例題3:進数表示とゼロ埋め
n = 255
print(f"dec={n:03d} hex={n:#06x} bin={n:#010b}") # dec=255 hex=0x00ff bin=0b0011111111
Python例題4:テンプレート文を再利用(str.format)
tmpl = "{name}さんの点数は{score:.1f}(順位 {rank:>3}位)"
print(tmpl.format(name="花子", score=92.345, rank=12))
Pythonまとめ
format は「どう見せるか」を短く正確に指定するための要。str.format はテンプレートに値を差し込み、書式指定子で幅・配置・桁・型を制御できる。組み込み format は値→文字列の直球変換、f文字列は最も読みやすい実務向けスタイル。3桁区切り、ゼロ埋め、小数精度、進数、百分率を押さえれば日常の整形は万全。波括弧は {{ }}、引数不一致に注意し、浮動小数の見せ方は書式で丸める。これを習慣化すれば、表示やログ、レポートの品質が一段上がります。
