Python 文字列フォーマット
ここで説明されているフォーマット操作 (% 演算子) は、多くの一般的なエラーの原因となるさまざまな特異性を示します [...]. 新しい フォーマット済み文字列リテラル [...] を使用すると、これらのエラーを回避できます。これらの代替手段は、テキストのフォーマットに対して、より強力で、柔軟で、拡張性の高いアプローチも提供します。
% operator
文字列リテラルを優先する
新しいコードでは、% 演算子よりも str.format または フォーマット済み文字列リテラル (Python 3.6+) の使用が強く推奨されます。
# % operator: 旧スタイルの文字列フォーマット (新規コードには非推奨)
name = 'Pete'
'Hello %s' % name # %s = 文字列プレースホルダ
"Hello Pete"
%d フォーマット指定子を使用して int 値を文字列に変換できます。
num = 5
'I have %d apples' % num
"I have 5 apples"
str.format
Python 3 では、文字列フォーマットの新しい方法が導入され、後に Python 2.7 にバックポートされました。これにより、文字列フォーマットの構文がより規則的になります。
# str.format() メソッド:モダンな文字列フォーマット (Python 2.7+)
name = 'John'
age = 20
"Hello I'm {}, my age is {}".format(name, age) # {} = プレースホルダ
"Hello I'm John, my age is 20"
"Hello I'm {0}, my age is {1}".format(name, age)
"Hello I'm John, my age is 20"
Formatted String Literals or f-Strings
Python 3.6+ を使用している場合、文字列の f-Strings が文字列をフォーマットするための推奨される方法です。
フォーマット済み文字列リテラル、または f-string は、f または F で始まる文字列リテラルです。これらの文字列には、波括弧 {} で区切られた式を含む置換フィールドを含めることができます。他の文字列リテラルは常に定数値を持つ一方、フォーマット済み文字列は実行時に評価される式です。
# f-string: 文字列をフォーマットするための推奨される方法 (Python 3.6+)
name = 'Elizabeth'
f'Hello {name}!' # f プレフィックスにより {} 内に式を含めることができる
'Hello Elizabeth!'
ログインしてこのクイズに回答し、学習の進捗を追跡できます
fmtf または Fformatstrインライン計算を行うことも可能です。
# f-strings は式をサポート:{} 内に計算を含めることができる
a = 5
b = 10
f'Five plus ten is {a + b} and not {2 * (a + b)}.' # 式を評価する
'Five plus ten is 15 and not 30.'
複数行の f-String
name = 'Robert'
messages = 12
(
f'Hi, {name}. '
f'You have {messages} unread messages'
)
'Hi, Robert. You have 12 unread messages'
= 指定子
これは式とその値を出力します。
# = 指定子:変数名とその両方を出力 (Python 3.8+)
from datetime import datetime
now = datetime.now().strftime("%b/%d/%Y - %H:%M:%S")
f'date and time: {now=}' # "now='Nov/14/2022 - 20:50:01'" を出力
"date and time: now='Nov/14/2022 - 20:50:01'"
スペースまたは文字の追加
name = 'Robert'
f"{name.upper() = :-^20}"
'name.upper() = -------ROBERT-------'
f"{name.upper() = :^20}"
'name.upper() = ROBERT '
f"{name.upper() = :20}"
'name.upper() = ROBERT '
数字のフォーマット
桁区切り (数千区切り) の追加
a = 10000000
f"{a:,}"
'10,000,000'
丸め処理
a = 3.1415926
f"{a:.2f}"
'3.14'
ログインしてこのクイズに回答し、学習の進捗を追跡できます
f"{a:.2f}" は何を行いますか?パーセンテージとして表示
a = 0.816562
f"{a:.2%}"
'81.66%'
数値フォーマットの表
| 数値 | フォーマット | 出力 | 説明 |
|---|---|---|---|
| 3.1415926 | {:.2f} | 3.14 | 浮動小数点数を小数点以下 2 桁でフォーマット |
| 3.1415926 | {:+.2f} | +3.14 | 符号付き浮動小数点数を小数点以下 2 桁でフォーマット |
| -1 | {:+.2f} | -1.00 | 符号付き浮動小数点数を小数点以下 2 桁でフォーマット |
| 2.71828 | {:.0f} | 3 | 浮動小数点数を小数点なしでフォーマット |
| 4 | {:0>2d} | 04 | ゼロで数値をパディング (左詰め、幅 2) |
| 4 | {:x<4d} | 4xxx | x で数値をパディング (右詰め、幅 4) |
| 10 | {:x<4d} | 10xx | x で数値をパディング (右詰め、幅 4) |
| 1000000 | {:,} | 1,000,000 | カンマ区切りでの数値フォーマット |
| 0.35 | {:.2%} | 35.00% | パーセンテージのフォーマット |
| 1000000000 | {:.2e} | 1.00e+09 | 指数表記 |
| 11 | {:11d} | 11 | 右寄せ (デフォルト、幅 10) |
| 11 | {:<11d} | 11 | 左寄せ (幅 10) |
| 11 | {:^11d} | 11 | 中央寄せ (幅 10) |
Template Strings
よりシンプルで機能が少ないメカニズムですが、ユーザーによって生成された文字列を扱う場合に推奨されます。複雑さが軽減されるため、テンプレート文字列はより安全な選択肢となります。
from string import Template
name = 'Elizabeth'
t = Template('Hey $name!')
t.substitute(name=name)
'Hey Elizabeth!'