f-string(f文字列)の書式指定とは、f"{値:書式}" のようにコロンの後ろに書く「書式指定ミニ言語」で、桁区切り・ゼロ埋め・寄せ・小数の桁数・進数などを1行で指定する仕組みです。 例えば f"{1234567.891:,.2f}" は '1,234,567.89' になります。

この記事では、書式指定ミニ言語の全項目(fill/align/sign/z/#/0/width/grouping/.precision/type)を「コード→出力」の早見表にまとめ、日付、= デバッグ、!r、幅の変数指定、Decimal、全角文字の幅ずれ対策まで紹介します。出力はすべて Python 3.13.7 で実際に実行した結果です。さらに、3.11と3.12で同じコードを動かして比較した PEP 701 の変更点と、3.14.7で動かした小数部の桁区切り・t-string も載せています。

f-string書式指定の早見表

まずはこの表で用が足ります。 n = 1234567.891、i = 255、x = 42、s = "abc"、r = 0.4567 として実行した結果です。

やりたいこと コード 出力
桁区切り(カンマ) f"{n:,}" '1,234,567.891'
桁区切り+小数2桁 f"{n:,.2f}" '1,234,567.89'
桁区切り(アンダースコア) f"{n:_}" '1_234_567.891'
小数点以下2桁 f"{3.14159:.2f}" '3.14'
有効数字3桁 f"{3.14159:.3}" '3.14'
ゼロ埋め5桁 f"{x:05}" '00042'
ゼロ埋め+小数 f"{3.14159:08.3f}" '0003.142'
左寄せ f"{s:<10}|" 'abc |'
右寄せ f"{s:>10}|" ' abc|'
中央寄せ f"{s:^10}|" ' abc |'
埋め文字を指定 f"{s:*^10}" '***abc****'
符号を常に付ける f"{x:+}" '+42'
正の数に空白 f"{x: }" ' 42'
パーセント f"{r:.1%}" '45.7%'
指数表記 f"{n:.2e}" '1.23e+06'
2進数 f"{i:b}" / f"{i:#b}" '11111111' / '0b11111111'
8進数 f"{i:o}" / f"{i:#o}" '377' / '0o377'
16進数 f"{i:x}" / f"{i:#X}" 'ff' / '0XFF'
2進数8桁 f"{5:08b}" '00000101'
文字列を切り詰め f"{s:.2}" 'ab'
日付 f"{dt:%Y-%m-%d}" '2026-09-28'
変数名=値(デバッグ) f"{price=}" 'price=1980'
repr で表示 f"{name!r}" "'ボールペン'"
幅を変数で f"{v:{w}.{p}f}" ' 3.142'(w=10, p=3)
波かっこ自体 f"{{name}}" '{name}'

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Python f-string書式指定|全項目の早見表と実行結果・3.14対応」

書式指定ミニ言語の構造

書式は「埋め文字・寄せ・符号・z・#・0・幅・区切り・.精度・型」の順に、必要なものだけ書きます。 公式ドキュメント(Python 3.14)の文法は次のとおりです。

format_spec:  [options][width_and_precision][type]
options:      [[fill]align][sign]["z"]["#"]["0"]
fill:         <任意の1文字>
align:        "<" | ">" | "=" | "^"
sign:         "+" | "-" | " "
width_and_precision: [width][grouping]["." [precision][grouping]]
grouping:     "," | "_"
type:         "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

例えば f"{-1234.5:_>12,.1f}" は次のように分解できます。

部分 項目 意味
_ fill 空いた所を _ で埋める
> align 右寄せ
12 width 全体で12文字
, grouping 3桁ごとにカンマ
.1 precision 小数1桁
f type 固定小数点
print(f"{-1234.5:_>12,.1f}")
____-1,234.5

順番を入れ替えると ValueError になるので、「寄せ→符号→0→幅→区切り→精度→型」の並びを覚えておくと迷いません。

項目別の完全一覧(コード→出力)

以下、すべて Python 3.13.7 で実行した出力です。変数は n = 1234567.891、i = 255、x = 42、neg = -42、s = "abc"、r = 0.4567 です。

fill と align:寄せと埋め文字

コード 出力 説明
f"{s:<10}|" 'abc |' 左寄せ(文字列の既定)
f"{s:>10}|" ' abc|' 右寄せ
f"{s:^10}|" ' abc |' 中央寄せ(余りは右側)
f"{s:*^10}|" '***abc****|' * で埋めて中央寄せ
f"{s:-<10}|" 'abc-------|' - で埋めて左寄せ
f"{s:10}|" 'abc |' 寄せ省略:文字列は左
f"{x:10}|" ' 42|' 寄せ省略:数値は右
f"{neg:=8}" '- 42' =:符号の後ろを埋める(数値のみ)

埋め文字を指定するときは、必ず寄せ記号(<>^=)とセットで書きます。

sign と z:符号の表示

コード 出力 説明
f"{x:+}" '+42' 正でも + を付ける
f"{neg:+}" '-42' 負は -
f"{x:-}" '42' 負のときだけ -(既定)
f"{x: }" ' 42' 正の数の前に空白(桁を揃えやすい)
f"{-0.0001:.2f}" '-0.00' 丸めた結果がマイナスゼロ
f"{-0.0001:z.2f}" '0.00' z(3.11以降)でマイナスゼロを 0.00 に

z は集計表で「-0.00」が出てしまうときに便利です(浮動小数点の表示型のみ)。

# と 0:進数の接頭辞とゼロ埋め

コード 出力 説明
f"{i:#b}" '0b11111111' 2進数に 0b
f"{i:#o}" '0o377' 8進数に 0o
f"{i:#x}" '0xff' 16進数に 0x
f"{i:#X}" '0XFF' 大文字
f"{x:05}" '00042' 幅5でゼロ埋め
f"{neg:08}" '-0000042' 符号の後ろをゼロ埋め
f"{-42:+06d}" '-00042' 符号+ゼロ埋め
f"{3.14159:08.3f}" '0003.142' 小数点も幅に含む
f"{1234567:0=15,}" '000,001,234,567' ゼロ埋め部分にも区切りが入る
f"{s:05}" 'abc00' 文字列は左寄せのまま右を0で埋める(3.10以降)

幅は「符号・小数点・区切り文字を含めた全体の文字数」です。f"{3.14159:08.3f}" は 3.142 の5文字に0を3つ足して8文字になります。

width と grouping:幅と桁区切り

コード 出力 説明
f"{n:,}" '1,234,567.891' カンマ区切り
f"{n:_}" '1_234_567.891' アンダースコア区切り
f"{n:,.2f}" '1,234,567.89' 区切り+小数2桁
f"{1234567:>15,}|" ' 1,234,567|' 幅15で右寄せ+区切り
f"{i:_b}" '1111_1111' 2進数は4桁ごと
f"{0xFFFFFFFF:_x}" 'ffff_ffff' 16進数も4桁ごと

, は10進数専用、_ は2・8・16進数では4桁ごとに入ります。

.precision:精度(小数の桁数・切り詰め)

コード 出力 説明
f"{3.14159:.2f}" '3.14' f と組み合わせると小数点以下の桁数
f"{3.14159:.3}" '3.14' 型なし・g では有効数字の桁数
f"{n:.2e}" '1.23e+06' 指数表記の小数部の桁数
f"{r:.1%}" '45.7%' パーセントの小数桁
f"{s:.2}" 'ab' 文字列は最大文字数(切り詰め)

.3 と .3f は意味が違います。 .3 は「有効数字3桁」、.3f は「小数点以下3桁」です。

type:表示型の一覧

型 対象 コード 出力
d 整数(10進) f"{1234567:d}" '1234567'
b 整数(2進) f"{i:b}" '11111111'
o 整数(8進) f"{i:o}" '377'
x / X 整数(16進) f"{i:x}" / f"{i:X}" 'ff' / 'FF'
c 整数→文字 f"{65:c}" 'A'
e / E 指数 f"{n:e}" / f"{n:.2E}" '1.234568e+06' / '1.23E+06'
f / F 固定小数点(既定6桁) f"{n:f}" / f"{float('inf'):F}" '1234567.891000' / 'INF'
g / G 一般(桁数で自動切替) f"{n:g}" / f"{n:G}" '1.23457e+06' / '1.23457E+06'
g 小さい数 f"{0.00001234:g}" '1.234e-05'
g 末尾の0を消す f"{12.0:g}" '12'
% パーセント(100倍) f"{r:%}" '45.670000%'
n ロケール対応の数値 f"{1234567:n}" '1234567'(Cロケール)
s 文字列 f"{s:s}" 'abc'
  • f は既定で小数6桁、% も同じく6桁です。桁数は .2f .1% のように指定します。
  • g は「有効数字6桁」で、桁が大きい・小さいと自動で指数表記になります。12.0 を 12 と表示したいときにも使えます。

n:ロケールに合わせた区切り

n は、locale.setlocale() で設定した地域の区切り文字を使います。 既定のCロケールでは区切りが付きません。ロケールを生成した環境で実行した結果です。

import locale

for loc in ["ja_JP.UTF-8", "en_US.UTF-8", "de_DE.UTF-8"]:
    locale.setlocale(locale.LC_ALL, loc)
    print(loc, f"{1234567:n}", f"{1234567.891:.10n}")
ja_JP.UTF-8 1,234,567 1,234,567.891
en_US.UTF-8 1,234,567 1,234,567.891
de_DE.UTF-8 1.234.567 1.234.567,891

n は g と同じ「有効数字」扱いなので、小数を出すときは .10n のように桁を多めに指定します。サーバーのロケール設定に左右されるため、日本向けの表示で固定したいなら , を使うほうが確実です。

日付の書式指定(strftime を f-string で)

datetime を f-string に入れると、コロンの後ろに strftime の書式をそのまま書けます。 dt = datetime(2026, 9, 28, 14, 5, 9, 123456) で実行した結果です。

from datetime import datetime

dt = datetime(2026, 9, 28, 14, 5, 9, 123456)
print(f"{dt:%Y-%m-%d}")
print(f"{dt:%Y年%m月%d日}")
print(f"{dt:%Y-%m-%d} {dt.month}月{dt.day}日")
print(f"{dt=:%Y-%m-%d}")
2026-09-28
2026年09月28日
2026-09-28 9月28日
dt=2026-09-28

よく使う日付の書式指定子

指定子 意味 出力
%Y / %y 西暦4桁 / 2桁 2026 / 26
%m / %d 月 / 日(0埋め2桁) 09 / 28
%H / %I 時(24時間 / 12時間) 14 / 02
%M / %S 分 / 秒 05 / 09
%f マイクロ秒 123456
%p AM/PM PM
%a / %A 曜日(短縮 / 完全) Mon / Monday
%b / %B 月名(短縮 / 完全) Sep / September
%j 年内の通算日 271
%U / %W 週番号(日曜始まり / 月曜始まり) 39 / 39
%G-W%V-%u ISO週番号 2026-W40-1
%w 曜日番号(日曜=0) 1
%c / %x / %X ロケールの日時 / 日付 / 時刻 Mon Sep 28 14:05:09 2026 / 09/28/26 / 14:05:09
%% % そのもの %
%-m/%-d 0埋めなし(Linux・macOSのみ) 9/28
  • 月や日を0埋めなしで出したいときは、{dt.month}月{dt.day}日 と属性を直接書くのがどのOSでも動く方法です(%-m はWindowsでは使えません)。
  • %a %b %c はロケールで変わります。ja_JP.UTF-8 を設定すると %a %b は 月 9月 になりました。
  • timedelta には strftime 書式が使えません。 f"{timedelta(hours=1):%H:%M}" は TypeError: unsupported format string passed to datetime.timedelta.__format__ になります。

= でデバッグ表示(Python 3.8以降)

{変数=} と書くと「式のテキスト=値」を出力します。 print デバッグで変数名を二度書かずに済みます。

price = 1980
name = "ボールペン"
rate = 0.12345
print(f"{price=}")
print(f"{price = }")
print(f"{rate=:.2%}")
print(f"{name=}")
print(f"{name=!s}")
print(f"{price*2=}")
print(f"{len(name)=}")
price=1980
price = 1980
rate=12.35%
name='ボールペン'
name=ボールペン
price*2=3960
len(name)=5

= を使うと既定で repr(!r)表示になるので、文字列はクォート付きになります。書式指定(:.2%)を付けるとそちらが優先され、!s を付けるとクォートなしになります。= の前後の空白もそのまま出力されます。

!r・!s・!a:変換フラグ

!r は repr()、!s は str()、!a は ascii() を通してから表示します。

class Item:
    def __init__(self, name):
        self.name = name
    def __str__(self):
        return f"商品:{self.name}"
    def __repr__(self):
        return f"Item(name={self.name!r})"

it = Item("ノート")
name = "ボールペン"
s = "こんにちは\n"
print(f"{it}")
print(f"{it!s}")
print(f"{it!r}")
print(f"{'café'!a}")
print(f"{s!r}")
print(f"{name!r:>12}|")
商品:ノート
商品:ノート
Item(name='ノート')
'caf\xe9'
'こんにちは\n'
     'ボールペン'|
フラグ 使いどころ
!r ログで文字列の前後の空白や改行を見える形にする
!s = と組み合わせてクォートを外す
!a ASCII以外の文字をエスケープ表記(é → \xe9 など)にして、出力先の文字コードの影響を避ける

変換フラグは書式指定より先に書きます({name!r:>12})。

幅や精度を変数で指定する(ネスト)

書式の中に {} を入れると、幅・精度・寄せを変数で変えられます。

v = 3.14159265
w, p, a, fmt = 10, 3, "^", ".2f"
print(f"{v:{w}.{p}f}|")
print(f"{v:{a}{w}.{p}}|")
print(f"{v:{fmt}}")
print(f"{v:>{w+2}.{p}f}|")
     3.142|
   3.14   |
3.14
       3.142|

表の列幅をデータの最大長に合わせたいときは、w = max(len(x) for x in names) を求めてから f"{x:<{w}}" と書けます。

辞書・属性・インデックスにアクセスする

order = {"id": 101, "item": "ノート", "qty": 3}
items = ["A", "B", "C"]
print(f"{order['item']} x {order['qty']}")
print(f"{items[0]}, {items[-1]}")
print("注文{0[id]}: {0[item]}".format(order))
ノート x 3
A, C
注文101: ノート

Python 3.11以前では、外側と違う引用符(" の中なら ')で辞書のキーを書きます。 3.12以降は同じ引用符も使えます(後述)。str.format() ではキーをクォートせず {0[item]} と書く点が違います。

複数行のf-string

name, qty, unit = "ボールペン", 3, 120
msg = (f"品名: {name}\n"
       f"数量: {qty:>4}\n"
       f"金額: {qty*unit:>6,}円")
print(msg)

html = f"""
<li>{name}</li>
<li>{qty*unit:,}円</li>
""".strip()
print(html)
品名: ボールペン
数量:    3
金額:    360円
<li>ボールペン</li>
<li>360円</li>

かっこで囲んで並べたf-stringは自動で連結されます。 三重引用符の f"""...""" はテンプレートのように書けます。

format()・str.format()・% 演算子との対応表

書式指定ミニ言語は f-string・format()・str.format() で共通です。 % 演算子は別の書き方です。v = 1234567.891 で実行しました。

やりたいこと f-string str.format() % 演算子 出力
小数2桁+区切り f"{v:,.2f}" "{:,.2f}".format(v) (区切りなし)"%.2f" % v 1,234,567.89 / 1234567.89
組み込み関数 format(v, ",.2f") ― ― 1,234,567.89
ゼロ埋め f"{3.14159:08.3f}" "{:08.3f}".format(3.14159) "%08.3f" % 3.14159 0003.142
右寄せ8桁 f"{'abc':>8}" "{:>8}".format("abc") "%8s" % "abc" abc
左寄せ8桁 f"{'abc':<8}" "{:<8}".format("abc") "%-8s" % "abc" abc
16進数 f"{255:#x}" "{:#x}".format(255) "%#x" % 255 0xff
符号付き f"{42:+}" "{:+}".format(42) "%+d" % 42 +42
指数 f"{v:e}" "{:e}".format(v) "%e" % v 1.234568e+06
repr f"{s!r}" "{!r}".format(s) "%r" % s 'abc'
名前で指定 f"{item}" "{item}".format(item=...) "%(item)s" % d ―
% 記号 f"{50}%" "{}%".format(50) "%d%%" % 50 50%

使い分けの目安:その場の変数を埋め込むなら f-string、書式を先に定義して後から値を入れる(テンプレートを設定ファイルに置く等)なら str.format()、logging のメッセージは % 形式(logger.info("件数: %d", n))が標準です。

Decimal の書式指定と丸め

Decimal も同じ書式指定が使えます。 ただし丸め方が float と違います。

from decimal import Decimal, ROUND_HALF_UP

print(f"{Decimal('1234.5'):,.2f}")
print(f"{Decimal('0.125'):.2f}", f"{Decimal('0.135'):.2f}")
print(f"{2.675:.2f}", f"{Decimal('2.675'):.2f}")
print(f"{Decimal('1E+3'):f}", f"{Decimal('0.1234'):%}")
print(Decimal("2.675").quantize(Decimal("0.01"), rounding=ROUND_HALF_UP))
print(f"{2.5:.0f}", f"{3.5:.0f}")
1,234.50
0.12 0.14
2.67 2.68
1000 12.34%
2.68
2 4
結果 理由
Decimal('0.125') → 0.12 Decimal の既定は偶数丸め(ROUND_HALF_EVEN)。5の前が偶数なら切り捨て
2.675 → 2.67 float の 2.675 は内部的に 2.67499… なので切り捨てになる
Decimal('2.675') → 2.68 10進で正確に持っているので偶数丸めで 2.68
2.5:.0f → 2 float の書式も偶数丸め

金額の四捨五入を確実にしたいときは、Decimal と quantize(..., rounding=ROUND_HALF_UP) で丸めてから f-string で表示します。

全角文字で幅がずれる問題と対処

f-string の幅は「文字数」で数えるため、全角文字が入ると表示がずれます。 実行結果です。

rows = [("ノート", 120), ("Pen", 80), ("消しゴムA", 60)]
for name, price in rows:
    print(f"{name:<10}|{price:>5}")
ノート       |  120
Pen       |   80
消しゴムA     |   60

ノート は3文字なので7文字の空白が足されますが、全角は半角2文字分の幅で表示されるため右にずれます。unicodedata.east_asian_width() で表示幅を数える関数を作ると揃います。

import unicodedata


def text_width(s: str) -> int:
    """全角(F/W)を2、それ以外を1として数えた表示幅"""
    return sum(2 if unicodedata.east_asian_width(c) in "FW" else 1 for c in s)


def pad(s: str, width: int, align: str = "<", fill: str = " ") -> str:
    """表示幅で左・右・中央寄せする"""
    space = max(width - text_width(s), 0)
    if align == "<":
        return s + fill * space
    if align == ">":
        return fill * space + s
    left = space // 2
    return fill * left + s + fill * (space - left)


rows = [("ノート", 120), ("Pen", 80), ("消しゴムA", 60)]
for name, price in rows:
    print(f"{pad(name, 10)}|{price:>5}")
print(f"{pad('中央', 10, '^', '*')}|")
ノート    |  120
Pen       |   80
消しゴムA |   60
***中央***|
文字 east_asian_width 数えた幅
ア・あ・ー W(全角) 2
ア(半角カナ) H 1
A Na 1
①・Ω A(曖昧) 1

A(曖昧)の文字は環境によって幅1にも2にもなります。 日本語環境の端末で ① などがずれる場合は、判定に "FWA" を使うと合わせられます。外部ライブラリの wcwidth を使う方法もあります。

Python 3.12の変更(PEP 701)を3.11と比較

Python 3.12 から、f-string の {} の中に「同じ引用符」「バックスラッシュ」「コメント」「改行」を書けるようになりました。 同じファイルを Python 3.11.15 と 3.12.3 で実行した結果です。

書いたコード 3.11.15 3.12.3
f"{order["item"]}"(同じ引用符) SyntaxError: f-string: unmatched '[' ノート を 3 冊
f"{'\n'.join(names)}"(バックスラッシュ) SyntaxError: f-string expression part cannot include a backslash 改行で連結される
{} 内に # コメント SyntaxError(単一引用符:unterminated string literal、三重引用符:f-string expression part cannot include '#') 合計: 360円
f"{f"{f"{f"{1+1}"}"}"}"(入れ子) SyntaxError: f-string: expecting '}' 2

3.12で動いたコメント入りのコードです。

qty, unit = 3, 120
total = f"合計: {
    qty * unit  # 数量 × 単価
:,}円"
print(total)
合計: 360円

3.11以前でも動かす必要があるコードでは、次のように書き換えます。

3.12以降の書き方 3.11以前でも動く書き方
f"{order["item"]}" f"{order['item']}"
f"{'\n'.join(names)}" nl = "\n" を先に定義して f"{nl.join(names)}"
{} 内のコメント 式を変数に入れてから埋め込む

Python 3.14の新機能

小数部にも桁区切り(3.14)

Python 3.14 から、精度の後ろにも , や _ を書けるようになり、小数部を3桁ごとに区切れます。 Python 3.14.7 と 3.13.7 で実行した結果です。

print(f"{1234567.891011:,.6_f}")
print(f"{1234567.891011:_.6,f}")
print(f"{0.123456789:.9_f}")
# Python 3.14.7
1,234,567.891_011
1_234_567.891,011
0.123_456_789

# Python 3.13.7
ValueError: Invalid format specifier ',.6_f' for object of type 'float'

t-string(テンプレート文字列、PEP 750)

t-string は t"..." と書き、文字列ではなく Template オブジェクトを返す新しいリテラルです。 埋め込む値と固定の文字列を分けて受け取れるので、HTMLのエスケープやSQLのパラメータ化などを「埋め込む前に」処理できます。Python 3.14.7 で実行しました。

import html
from string.templatelib import Interpolation, Template

name = "<b>ノート</b>"
qty = 3
t = t"商品: {name} 数量: {qty:>3}"
print(type(t))
print(t.strings)
print(t.values)
for part in t:
    print(repr(part))


def render_html(template: Template) -> str:
    out = []
    for part in template:
        if isinstance(part, Interpolation):
            value = format(part.value, part.format_spec)
            out.append(html.escape(value))
        else:
            out.append(part)
    return "".join(out)


print(render_html(t))
print(f"商品: {name} 数量: {qty:>3}")
<class 'string.templatelib.Template'>
('商品: ', ' 数量: ', '')
('<b>ノート</b>', 3)
'商品: '
Interpolation('<b>ノート</b>', 'name', None, '')
' 数量: '
Interpolation(3, 'qty', None, '>3')
商品: &lt;b&gt;ノート&lt;/b&gt; 数量:   3
商品: <b>ノート</b> 数量:   3
  • Interpolation には値・式のテキスト・変換フラグ・書式指定('>3')が入っていて、書式の適用は受け取った側が行います(上の例では format(part.value, part.format_spec))。
  • str(t) は結合した文字列にはならず、Template(strings=(...), interpolations=(...)) という表示になりました。文字列が欲しい場面では今までどおり f-string を使います。
  • Python 3.13 で同じコードを実行すると、t"..." の行で SyntaxError: invalid syntax になります。

よくあるエラーと直し方

実際に実行したエラーメッセージです。

コード エラー 直し方
f"{3.14:d}" ValueError: Unknown format code 'd' for object of type 'float' .0f を使う、または int() で変換
f"{42:s}" ValueError: Unknown format code 's' for object of type 'int' 型指定を外す(f"{42}")
f"{'abc':,}" ValueError: Cannot specify ',' with 's'. 数値に変換してから区切る
f"{None:>5}" TypeError: unsupported format string passed to NoneType.__format__ f"{None!s:>5}" → ' None'
f"{[1,2]:>8}" TypeError: unsupported format string passed to list.__format__ !s を付けて文字列にしてから寄せる
f"{x}"(x未定義) NameError: name 'x' is not defined f-string は定義時にすぐ評価される

None やリストに幅指定をすると TypeError になります。 データに None が混ざる列を表示するときは !s を付けるのが手軽です。

よくある質問

Q. f-string と format() はどちらを使えばよいですか? A. 変数をその場で埋め込むなら f-string が短く読みやすいです。書式文字列を設定ファイルや定数として先に用意し、後から値を入れる場合は str.format() が向いています。書式指定ミニ言語はどちらも同じなので、この記事の表はそのまま使えます。

Q. 小数点以下の不要な0を消すには? A. f"{12.0:g}" → '12' のように g を使います。ただし g は有効数字6桁で大きな数を指数表記にするため、f"{1234567.0:g}" は '1.23457e+06' になります。桁数が大きい値では f"{v:.2f}".rstrip("0").rstrip(".") のように後処理する方法もあります。

Q. 波かっこ {} を文字として出したいときは? A. {{ と }} のように2つ重ねます。f"{{{name}}}" は '{ボールペン}' になります。

まとめ

  • 書式は「埋め文字・寄せ・符号・z・#・0・幅・区切り・.精度・型」の順に、必要なものだけ書きます。
  • 桁区切りは ,、ゼロ埋めは 05、小数2桁は .2f、パーセントは .1% が基本の4つです。
  • .3 は有効数字、.3f は小数点以下の桁数で意味が違います。
  • 日付は f"{dt:%Y-%m-%d}"、0埋めなしは {dt.month} のように属性を使うとOSを問いません。
  • {変数=} でデバッグ表示、!r で repr 表示ができます。
  • 全角文字は unicodedata.east_asian_width() で幅を数えて揃えます。
  • 3.12で同じ引用符・バックスラッシュ・コメントが使えるようになり、3.14で小数部の区切りと t-string が加わりました。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Python f-string書式指定|全項目の早見表と実行結果・3.14対応」

株式会社RJCでは、f-stringのような日々のコードを読みやすくする書き方を、プロジェクトの中で仲間と教え合っています。こうした知識を共有しながら、日々技術を磨いています。

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?