Pythonのf-stringは、読みやすくて高速な文字列フォーマット手段です。
本稿では日付フォーマットと桁数指定に焦点を当て、初心者がすぐに使える最小限のルールから、よくあるつまずきまで丁寧に解説します。
サンプルコードは実行結果付きで、安心して試せるようにしました。
Pythonのf-string基本(書式指定)
{変数:書式}の基本
f-stringの書式指定は、{変数:書式}
という形で記述します。
:の後ろに並べる「書式」が出力の見た目を決めます。
書式を省略すると通常の文字列表現になります。
# f-stringの基本
name = "Taro"
score = 95
pi = 3.14159
print(f"名前:{name}") # 文字列はそのまま
print(f"テスト点:{score:d}") # 整数は:dで10進整数として
print(f"円周率:{pi:.2f}") # 小数は小数点以下2桁で丸め
名前:Taro
テスト点:95
円周率:3.14
ポイントとして、f-string内の変数名の後に:書式を続けるだけで整形できます。
従来のformat()
より短く読みやすいのが特徴です。
型指定(s,d,f)の最小セット
まずはこの3つだけ覚えれば十分です。
s
: 文字列d
: 整数(10進)f
: 浮動小数点(小数部分の桁数を指定可能)
以下の表は最小セットの対応です。
指定子 | 対応する型 | 主な用途 | 例 |
---|---|---|---|
s | str | 文字列をそのまま出す | f”{‘abc’:s}” → “abc” |
d | int | 10進整数として出す | f”{42:d}” → “42” |
f | float | 小数点以下を制御 | f”{3.1415:.2f}” → “3.14” |
# 型指定の最小セット
s = "abc"
i = 42
x = 2.5
print(f"文字列:{s:s}")
print(f"整数:{i:d}")
print(f"小数:{x:.1f}")
文字列:abc
整数:42
小数:2.5
注意: s
は基本的に文字列に使います。
f
は小数向けですが、整数にも使うと浮動小数点として丸めた結果が出力されます。
幅・整列・埋め文字(>,<,^,0)
出力の幅や位置合わせは、幅、整列記号、埋め文字を組み合わせます。
- 整列: 右寄せ
>
、左寄せ<
、中央寄せ^
- 幅: 整列記号の後に整数
- 埋め文字: 整列記号の前に1文字(数値のゼロ埋めは特別に
0
を幅の直前に置く)
# 幅・整列・埋め文字の例
n = 123
print(f"|{n:>6}|") # 右寄せ、幅6
print(f"|{n:<6}|") # 左寄せ、幅6
print(f"|{n:^6}|") # 中央寄せ、幅6
print(f"|{n:*<6}|") # 左寄せ、埋め文字*、幅6 → 右側が*で埋まる
print(f"|{n:06d}|") # ゼロ埋め、幅6、整数
| 123|
|123 |
| 123 |
|123***|
|000123|
レイアウトを整える時は、まず「どの方向に揃えるか」を決め、必要に応じて埋め文字やゼロ埋めを加えます。
f-stringでの日付フォーマット
日付時刻の整形はstrftimeの%記法をf-stringの書式部分で使います。
{dt:%Y-%m-%d}
のように書くのがポイントです。
{dt:%Y-%m-%d}で日付
from datetime import datetime
dt = datetime(2025, 1, 5, 9, 7, 3) # 2025年1月5日 09:07:03
print(f"日付:{dt:%Y-%m-%d}")
日付:2025-01-05
%Yが年、%mが月、%dが日です。
時刻(%H:%M:%S)
from datetime import datetime
dt = datetime(2025, 1, 5, 9, 7, 3)
print(f"時刻:{dt:%H:%M:%S}")
時刻:09:07:03
24時間表記で、%H
が時、%M
が分、%S
が秒です。
区切りの変更(%Y/%m/%d)
from datetime import datetime
dt = datetime(2025, 1, 5, 9, 7, 3)
print(f"スラッシュ区切り:{dt:%Y/%m/%d}")
スラッシュ区切り:2025/01/05
ハイフンやスラッシュなど、区切りは自由に文字として入れられます。
年月日のゼロ埋め
%mや%dはデフォルトでゼロ埋めされます。
1月は01
、5日は05
になります。
from datetime import datetime
dt = datetime(2025, 1, 5, 9, 7, 3)
print(f"ゼロ埋め日付:{dt:%m/%d}") # 月日だけ
ゼロ埋め日付:01/05
補足: ゼロ埋めしない版が欲しい場合はOS依存のフラグ(例:%-m)を使う環境もありますが、移植性の観点ではゼロ埋めを基本にすると安全です。
ISO風(%Y-%m-%dT%H:%M)
from datetime import datetime
dt = datetime(2025, 1, 5, 9, 7, 3)
print(f"ISO風:{dt:%Y-%m-%dT%H:%M}")
ISO風:2025-01-05T09:07
日時をファイル名やログに埋め込む場合は、このISO風フォーマットが扱いやすいです。
f-stringの桁数指定と数値整形
幅指定({:8})
幅は最小幅を意味し、足りない分はスペースで埋まります。
val = 42
print(f"|{val:8}|") # 幅8
print(f"|{val:3}|") # 幅3
| 42|
| 42|
寄せ(>,<,^)
整列記号で寄せ方向を決めます。
s = "OK"
print(f"|{s:>6}|") # 右寄せ
print(f"|{s:<6}|") # 左寄せ
print(f"|{s:^6}|") # 中央寄せ
| OK|
|OK |
| OK |
ゼロ埋め({:04d})
数値を先頭ゼロで揃えたい場合は0
フラグを使います。
num = 7
print(f"{num:04d}") # 幅4でゼロ埋め
print(f"{-7:04d}") # 符号付きでもOK
0007
-007
符号は左端に、残りがゼロで埋まるのがポイントです。
小数点以下(.2f)
小数点以下の桁数を丸めて表示します。
x = 3.14159
print(f"{x:.2f}") # 小数第3位で四捨五入
print(f"{x:8.2f}") # 幅8と組み合わせ
3.14
3.14
千区切り(,)
カンマで3桁ごとの区切りを入れられます。
,
は他の指定と併用可能です。
big = 1234567
rate = 12345.6789
print(f"{big:,}")
print(f"{rate:,.2f}") # 小数桁数と併用
1,234,567
12,345.68
符号の制御(+,-,空白)
符号の表示は+
、-
、空白
の3種類で制御します。
+
: 正数にも+
を付ける-
: 負数のみ-
を付ける(デフォルト)空白
: 正数は先頭スペース、負数は-
pos = 42
neg = -42
print(f"{pos:+d} / {neg:+d}") # +フラグ
print(f"{pos:-d} / {neg:-d}") # -フラグ
print(f"{pos: d} / {neg: d}") # 空白フラグ
+42 / -42
42 / -42
42 / -42
パーセント表示(%)
%
型を使うと元の値を100倍して%記号を付ける表示になります。
ratio = 0.256
print(f"{ratio:%}") # デフォルトは6桁相当
print(f"{ratio:.1%}") # 小数1桁
print(f"{ratio:8.2%}") # 幅8・小数2桁
25.600000%
25.6%
25.60%
初心者がハマりやすいミスとコツ
fを付け忘れて文字列のまま
f-stringは先頭にfを必ず付ける必要があります。
付け忘れると波かっこがそのまま出ます。
total = 2500
print("合計は {total} 円") # fが無い…変数が展開されない
print(f"合計は {total} 円") # 正しい
合計は {total} 円
合計は 2500 円
波かっこそのままが見えたら「fの付け忘れ」を疑いましょう。
日付は%記法を使う
日付のフォーマットは%Y, %m, %dなどの%記法で指定します。
{dt:Y-m-d}
のように%を付けないと意図通りになりません。
from datetime import datetime
dt = datetime(2025, 1, 5, 9, 7, 3)
print(f"{dt:Y-m-d}") # 誤り: %を付けていない
print(f"{dt:%Y-%m-%d}") # 正しい
Y-m-d
2025-01-05
最初の行は%を付けていないため文字がそのまま出てしまう例です。
整数に.2fは不可
見出しは挑発的ですが、整数に.2fは実は可能です。
内部的に浮動小数に変換して丸められます。
一方で逆に小数にdを使うのは不可です。
# 整数に.2fは「可能」→ 浮動小数として表示
print(f"{7:.2f}") # 7.00
# 小数にdは「不可」→ エラーになるので捕捉して表示
value = 3.2
try:
print(f"{value:d}")
except ValueError as e:
print(f"エラー:{e}")
7.00
エラー:Unknown format code 'd' for object of type 'float'
型に合う書式を選ぶのが基本です。
整数を小数表記にしたい時だけ.Nf
を使いましょう。
幅指定は全体の桁数
幅指定は符号や小数点、カンマも含めた「全体の最小幅」です。
n = -1234
print(f"|{n:6}|") # 幅6 → 符号込みで5桁だから左に1スペース
print(f"|{n:,.2f}|") # 符号・カンマ・小数点を含む全体で幅が決まる
| -1234|
|-1,234.00|
表示が崩れる場合は「何文字必要か」を符号や区切りも含めて数えると安定します。
桁数不足でも切り捨てない
幅は足りなければそのまま広がるだけで、文字列を切り捨てたりはしません。
big = 12345
print(f"|{big:3}|") # 幅3だが5桁 → そのまま全体を出す
|12345|
切り捨てたい場合はスライスや独自ロジックで明示的に処理します。
まとめ
本記事では、f-stringの基本の書式指定から、日付の%記法、そして桁数指定と数値整形までを一気に解説しました。
ポイントは次の通りです。
まず変数の後ろに:書式を付ける基本形を押さえ、s,d,fの最小セットに慣れましょう。
日付は%Y-%m-%dのように%記法を使い、数値は幅・寄せ・埋め文字でレイアウトを整え、ゼロ埋めや千区切り、符号、%表示を状況に応じて使い分けます。
最後にfの付け忘れや型と書式の不一致などの初歩的なミスを避ければ、見やすく堅牢な出力が簡単に得られます。
実務では「まず目的の見た目を考え、必要な書式を最小限で組み合わせる」のが最短ルートです。