Python | ファイル操作など:format

Python
スポンサーリンク

概要(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桁)
Python

str.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'(整数)
Python

f文字列は「読みやすさ最優先」の現代的スタイル

式をそのまま書け、同じ書式指定が使えます。ロジックの見通しが良く、日常的な出力に最適です。

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'
Python

3桁区切り・ゼロ埋め

数値の見せ方で一気に可読性が上がります。

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桁区切り、ゼロ埋め、小数精度、進数、百分率を押さえれば日常の整形は万全。波括弧は {{ }}、引数不一致に注意し、浮動小数の見せ方は書式で丸める。これを習慣化すれば、表示やログ、レポートの品質が一段上がります。

タイトルとURLをコピーしました