【Python】f-stringと文字列フォーマット|書式・桁区切り・小数・日付

【Python】f-stringと文字列フォーマット|書式・桁区切り・小数・日付 Python

文字列の中に変数や計算結果を埋め込みたいとき、Pythonでもっとも手軽で読みやすいのがf-string(フォーマット済み文字列リテラル)です。文字列の前にfを付け、{ }の中に変数や式を書くだけで、その値が文字列に差し込まれます。Python 3.6以降で使えます。

さらに、{ }の中で:のあとに書式を指定すると、3桁区切り・小数桁・ゼロ埋め・日付の整形などができます。format()メソッドや%演算子という古い書き方もありますが、今はf-stringが基本です。この記事では、実機のPythonで確認しながら、f-stringと書式指定を整理します。

先に結論

  • f-stringはf"こんにちは{name}さん"{ }に変数や式を書くと値が差し込まれます。
  • 書式は:のあとに指定します。3桁区切りは{x:,}、小数2桁は{x:.2f}です。
  • 組み合わせて{x:,.2f}、ゼロ埋め幅は{x:08.2f}のように書きます。
  • 寄せは右{x:>10}・左{x:<10}・中央{x:^10}です。
  • 日付は{d:%Y/%m/%d}、デバッグには{x=}(変数名と値を出す)が便利です。
  • 古いformat()%もありますが、読みやすく速いf-stringを基本にします。

文字列の連結は文字列を連結・結合する方法、埋め込む値の元になるリスト(list)の使い方辞書(dict)の使い方もあわせて参考になります。

スポンサーリンク

f-stringの基本(変数・式の埋め込み)

文字列の前にfを付け、{ }の中に変数や式を書きます。{ }の中は、ただの式として評価されます。

basic.py
name = "山田"
age = 30

# 変数を埋め込む
f"{name}は{age}歳です"        # 山田は30歳です

# 式も書ける
f"合計 {2 + 3 * 4}"          # 合計 14
f"来年は{age + 1}歳"         # 来年は31歳

# メソッドやインデックスも使える
f"{name.upper()}"            # YAMADA
items = ["A", "B"]
f"最初は{items[0]}"          # 最初はA

実機でも、f"{name}は{age}歳です"山田は30歳ですf"合計 {2 + 3 * 4}"合計 14になりました。{ }の中には、変数だけでなく計算式、メソッド呼び出し、リストのインデックスなど、式なら何でも書けます。

書式を指定する(:で桁区切り・小数)

{ }の中で:のあとに「書式指定」を書くと、数値の見た目を整えられます。よく使うのが、3桁区切りの,と、小数桁の.nfです。

format-spec.py
price = 1234567

# 3桁区切り
f"{price:,}"          # 1,234,567

# 小数2桁にそろえる
f"{3.14159:.2f}"      # 3.14

# 3桁区切りと小数を組み合わせる
f"{1234567.891:,.2f}"  # 1,234,567.89

# パーセント表示(×100して%を付ける)
f"{0.1234:.1%}"       # 12.3%

実機でも、{price:,}1,234,567{3.14159:.2f}3.14{1234567.891:,.2f}1,234,567.89になりました。金額表示なら:,.0f(3桁区切りで小数なし)、割合なら:.1%のように、用途に合わせて指定できます。

書式指定子の一覧

よく使う書式指定子をまとめます。すべて実機で確認した出力です。

書式 意味 出力例
{x:,} 3桁区切り 1,234,567
{x:.2f} 小数2桁 3.14
{x:,.2f} 3桁区切り+小数2桁 1,234,567.89
{x:08.2f} ゼロ埋めで幅8 00003.14
{x:>10} 右寄せ・幅10 (右に寄る)
{x:^10} 中央寄せ・幅10 (中央に寄る)
{x:+} 符号を付ける +5 / -5
{x:.1%} パーセント 12.3%
{x:x} 16進数 ff
{d:%Y/%m/%d} 日付 2026/03/09

幅と寄せ(ゼロ埋め・右寄せ・中央寄せ)

桁数をそろえて表のように整列させたいときは、幅と寄せを指定します。>が右寄せ、<が左寄せ、^が中央寄せ、数字の前の0がゼロ埋めです。

align.py
age = 30

f"[{age:>10}]"     # [        30](右寄せ・幅10)
f"[{age:<10}]"     # [30        ](左寄せ)
f"[{age:^10}]"     # [    30    ](中央寄せ)

# ゼロ埋め(連番などに便利)
f"{7:03}"          # 007(3桁にゼロ埋め)
f"{3.14:08.2f}"    # 00003.14(幅8・小数2桁・ゼロ埋め)

# 埋める文字を指定(* で埋める)
f"{age:*^10}"      # ****30****

実機でも、{age:>10}は右寄せ、{age:^10}は中央寄せになりました。{7:03}007とゼロ埋めされます。連番ファイル名や、数値を縦にそろえた一覧表示に便利です。

日付のフォーマット

datetimeオブジェクトをf-stringに入れ、:のあとに日付の書式(%Yなど)を書くと、好きな形式に整えられます。

date.py
from datetime import datetime

d = datetime(2026, 3, 9, 14, 5)

f"{d:%Y/%m/%d}"           # 2026/03/09
f"{d:%Y-%m-%d %H:%M}"     # 2026-03-09 14:05
f"{d:%Y年%m月%d日}"       # 2026年03月09日

# 現在日時を整形する
now = datetime.now()
f"{now:%Y%m%d_%H%M%S}"    # 20260309_140530(ファイル名向け)

実機でも、{d:%Y/%m/%d %H:%M}2026/03/09 14:05になりました。%Y(4桁年)、%m(月)、%d(日)、%H(24時間)、%M(分)、%S(秒)を組み合わせます。ファイル名に使うなら、区切りのない%Y%m%d_%H%M%Sが定番です。

デバッグに便利な {x=}

Python 3.8以降では、{変数=}と書くと、変数名と値の両方が出力されます。デバッグで「この変数が今いくつか」を確認するときに便利です。

debug.py
age = 30
name = "山田"

# {変数=} で「変数名=値」が出る
f"{age=}"        # age=30
f"{name=}"       # name='山田'

# 式も書ける
f"{age * 2=}"    # age * 2=60

# わざわざ "age =", age と書かなくてよい
print(f"{age=}, {name=}")   # age=30, name='山田'

実機でも、f"{age=}"age=30になりました。print("age =", age)のように書く必要がなく、print(f"{age=}")だけで変数名と値が出ます。デバッグのprintがぐっと楽になります。

format()と%演算子(古い書き方)

f-string以前は、format()メソッドや%演算子で文字列を組み立てていました。古いコードで見かけるため、読めるようにしておくとよいでしょう。

format-percent.py
# format() メソッド
"{} は {} 円".format("りんご", 300)        # りんご は 300 円
"{0} と {1}".format("A", "B")              # A と B(番号で指定)
"{name}".format(name="山田")               # 山田(名前で指定)
"{:,.2f}".format(1234.5)                    # 1,234.50(書式も同じ)

# % 演算子(さらに古い書き方)
"%s は %d 円" % ("みかん", 100)            # みかん は 100 円
"%.2f" % 3.14159                           # 3.14

# 同じ結果を f-string で(最も読みやすい)
price = 300
f"りんご は {price} 円"                     # りんご は 300 円

実機でも、format()%はどちらも正しく動きましたが、変数を直接書けるf-stringがいちばん読みやすく、速度も優れています。新しく書くコードはf-stringを使いformat()%は「古いコードを読むため」に覚えておけば十分です。

よくある失敗

文字列の前にfを付け忘れる

fが無いと、{name}がそのまま文字列として出ます。変数を埋め込むには、必ず先頭にfを付けます。

:の前後を間違える

書式は{値:書式}の順です。{:.2f x}のように順番を間違えるとエラーになります。値が先、:のあとが書式です。

f-stringの中で同じ引用符を使う(古いPython)

Python 3.11以前では、f"{d['key']}"のように、外側と内側で同じ引用符を使うとエラーになります。内側は別の引用符("')を使うと安全です(3.12以降は同じでも可)。

3桁区切りや小数で書式を付け忘れる

数値をそのまま埋め込むと区切りは付きません。{x:,}{x:.2f}のように書式を指定します。

古いformat()や%を新規コードで使う

新しいコードはf-stringが読みやすく速いです。format()%は古いコードを読むためのもの、と考えるとよいでしょう。

よくある質問

Q数値を3桁区切りで表示するには?
Af"{price:,}"1,234,567になります。小数も付けるならf"{x:,.2f}"です。金額表示でよく使います。
Q小数点以下の桁数をそろえるには?
Af"{x:.2f}"で小数2桁になります。.2f2が桁数で、.0fなら小数なし(整数に丸め)です。3桁区切りと組み合わせて{x:,.2f}とも書けます。
Q連番をゼロ埋めするには?
Af"{n:03}"007のように3桁にゼロ埋めできます。033が桁数です。連番ファイル名や整列表示に便利です。
Qf-stringとformat()はどちらを使うべきですか?
A新しく書くなら、変数を直接書けて読みやすく速いf-stringがおすすめです。format()%演算子は古い書き方で、既存コードを読むために覚えておけば十分です。
Qデバッグで変数名と値を一緒に出すには?
Aprint(f"{age=}")と書くとage=30のように変数名と値が出ます(Python 3.8以降)。print("age =", age)と書く手間が省け、デバッグが楽になります。

まとめ

  • f-stringはf"{変数}"{ }の中に変数や式を書くと値が差し込まれます。
  • 書式は:のあと。3桁区切り{x:,}、小数{x:.2f}、組み合わせ{x:,.2f}です。
  • 幅と寄せは{x:>10}(右)・{x:^10}(中央)・{x:03}(ゼロ埋め)です。
  • 日付は{d:%Y/%m/%d}、デバッグは{x=}が便利です。
  • format()%もありますが、新規コードはf-stringを基本にします。

f-stringは、変数の埋め込みから数値・日付の整形まで、これ1つでこなせる便利な機能です。「{値:書式}の順」「3桁区切りは,、小数は.nf」を押さえれば、見やすい出力をすぐに作れるようになります。