閉じる

Pythonのf-string書式指定まとめ(日付フォーマット・桁数)

Pythonのf-stringは、読みやすくて高速な文字列フォーマット手段です。

本稿では日付フォーマット桁数指定に焦点を当て、初心者がすぐに使える最小限のルールから、よくあるつまずきまで丁寧に解説します。

サンプルコードは実行結果付きで、安心して試せるようにしました。

Pythonのf-string基本(書式指定)

{変数:書式}の基本

f-stringの書式指定は、{変数:書式}という形で記述します。

:の後ろに並べる「書式」が出力の見た目を決めます

書式を省略すると通常の文字列表現になります。

Python
# 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: 浮動小数点(小数部分の桁数を指定可能)

以下の表は最小セットの対応です。

指定子対応する型主な用途
sstr文字列をそのまま出すf”{‘abc’:s}” → “abc”
dint10進整数として出すf”{42:d}” → “42”
ffloat小数点以下を制御f”{3.1415:.2f}” → “3.14”
Python
# 型指定の最小セット
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を幅の直前に置く)
Python
# 幅・整列・埋め文字の例
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}で日付

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

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

Python
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になります。

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

Python
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})

幅は最小幅を意味し、足りない分はスペースで埋まります。

Python
val = 42
print(f"|{val:8}|")   # 幅8
print(f"|{val:3}|")   # 幅3
実行結果
|      42|
| 42|

寄せ(>,<,^)

整列記号で寄せ方向を決めます。

Python
s = "OK"
print(f"|{s:>6}|")   # 右寄せ
print(f"|{s:<6}|")   # 左寄せ
print(f"|{s:^6}|")   # 中央寄せ
実行結果
|    OK|
|OK    |
|  OK  |

ゼロ埋め({:04d})

数値を先頭ゼロで揃えたい場合は0フラグを使います。

Python
num = 7
print(f"{num:04d}")   # 幅4でゼロ埋め
print(f"{-7:04d}")    # 符号付きでもOK
実行結果
0007
-007

符号は左端に、残りがゼロで埋まるのがポイントです。

小数点以下(.2f)

小数点以下の桁数を丸めて表示します。

Python
x = 3.14159
print(f"{x:.2f}")   # 小数第3位で四捨五入
print(f"{x:8.2f}")  # 幅8と組み合わせ
実行結果
3.14
    3.14

千区切り(,)

カンマで3桁ごとの区切りを入れられます。

,は他の指定と併用可能です。

Python
big = 1234567
rate = 12345.6789
print(f"{big:,}")
print(f"{rate:,.2f}")   # 小数桁数と併用
実行結果
1,234,567
12,345.68

符号の制御(+,-,空白)

符号の表示は+-空白の3種類で制御します。

  • +: 正数にも+を付ける
  • -: 負数のみ-を付ける(デフォルト)
  • 空白: 正数は先頭スペース、負数は-
Python
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倍して%記号を付ける表示になります。

Python
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を必ず付ける必要があります。

付け忘れると波かっこがそのまま出ます。

Python
total = 2500

print("合計は {total} 円")     # fが無い…変数が展開されない
print(f"合計は {total} 円")     # 正しい
実行結果
合計は {total} 円
合計は 2500 円

波かっこそのままが見えたら「fの付け忘れ」を疑いましょう

日付は%記法を使う

日付のフォーマットは%Y, %m, %dなどの%記法で指定します。

{dt:Y-m-d}のように%を付けないと意図通りになりません。

Python
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を使うのは不可です。

Python
# 整数に.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を使いましょう。

幅指定は全体の桁数

幅指定は符号や小数点、カンマも含めた「全体の最小幅」です。

Python
n = -1234
print(f"|{n:6}|")       # 幅6 → 符号込みで5桁だから左に1スペース
print(f"|{n:,.2f}|")    # 符号・カンマ・小数点を含む全体で幅が決まる
実行結果
| -1234|
|-1,234.00|

表示が崩れる場合は「何文字必要か」を符号や区切りも含めて数えると安定します。

桁数不足でも切り捨てない

幅は足りなければそのまま広がるだけで、文字列を切り捨てたりはしません。

Python
big = 12345
print(f"|{big:3}|")   # 幅3だが5桁 → そのまま全体を出す
実行結果
|12345|

切り捨てたい場合はスライス独自ロジックで明示的に処理します。

まとめ

本記事では、f-stringの基本の書式指定から、日付の%記法、そして桁数指定と数値整形までを一気に解説しました。

ポイントは次の通りです。

まず変数の後ろに:書式を付ける基本形を押さえ、s,d,fの最小セットに慣れましょう。

日付は%Y-%m-%dのように%記法を使い、数値は幅・寄せ・埋め文字でレイアウトを整え、ゼロ埋めや千区切り、符号、%表示を状況に応じて使い分けます。

最後にfの付け忘れ型と書式の不一致などの初歩的なミスを避ければ、見やすく堅牢な出力が簡単に得られます。

実務では「まず目的の見た目を考え、必要な書式を最小限で組み合わせる」のが最短ルートです。

この記事を書いた人
エーテリア編集部
エーテリア編集部

人気のPythonを初めて学ぶ方向けに、文法の基本から小さな自動化まで、実際に手を動かして理解できる記事を書いています。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!