この記事では、文字列に値をフォーマットした際に設定できる書式について解説します。
書式を設定することで「0埋め」したり「幅を設定」したり様々な表現をすることができます。
フォーマットについては以下の記事を参考にしてください。
それでは、書式の設定方法を見ていきましょう!
書式の基本
書式は、書式指定文字列の置換フィールド({})内を:で区切った右側に指定します。
# str.format()メソッドの場合 '{:書式}'.format(埋め込む値) # フォーマット済み文字列リテラルの場合 f'{埋め込む値:書式}'
書式は以下のように指定します。
それでは、各パラメータの意味と指定方法を見ていきましょう!
型の指定: type
typeを指定することで指定したタイプの値として表記させることができます。typeは、フォーマットする値によって指定できる型が異なります。
文字列
文字列では、以下のようなtypeを指定することができます。
| 型 | 意味 |
|---|---|
| s | 文字列。デフォルト値。 |
s = 'abc' text = f'{s:s}' print(text) text = f'{s}' print(text)
実行結果
abc abc
デフォルト値なので基本的には省略されます。
整数
整数では、以下のようなtypeを指定することができます。
| 型 | 意味 |
|---|---|
| c | 対応するUnicode文字に変換する |
| d | 10進数 |
| b | 2進数 |
| o | 8進数 |
| x | 16進数 |
Unicode文字の場合。
u = 97 text = f'{u:c}' print(text)
実行結果
a
2進数の場合。
num = 5 text = f'{num:b}' print(text)
実行結果
101
浮動小数点数
浮動小数点数では、以下のようなtypeを指定することができます。
| 型 | 意味 |
|---|---|
| e | 指数表記。Eも指定可能。 |
| f | 固定小数点数として表示。Fも指定可能。 |
| g | 数値の大きさに応じて固定小数点形式か科学的記数法のどちらかで結果をフォーマットします。Gも指定可能。 |
| % | 100倍され、パーセント記号付きで表示される |
指数表記の場合。
num = 123.456 text = f'{num:e}' print(text)
実行結果
1.234560e+02
パーセント表記の場合。
print(f'{0.01:%}') print(f'{0.1:%}') print(f'{1:%}') print(f'{0.14155:%}')
実行結果
1.000000% 10.000000% 100.000000% 14.155000%
幅: width
widthに整数を指定することで幅を設定することができます。
num = 123 text = f'L{num:10}R' print(text)
実行結果
L 123R
フォーマットする文字列よりも小さい幅を指定しても意味はありません。
num = 123 text = f'L{num:1}R' print(text)
実行結果
L123R
幅寄せ: align
alignを指定することで幅寄せする向きを設定することができます。
指定できる記号は以下の通り。
| 書式 | 意味 |
|---|---|
| < | 左寄せ |
| > | 右寄せ |
| ^ | 中寄せ |
| = | 符号の後ろかつ数字の前をfillで指定した値で埋める。数値型のみに有効。 |
num = 123 # 左寄せ text = f'L{num:<10}R' print(text) # 右寄せ text = f'L{num:>10}R' print(text) # 中寄せ text = f'L{num:^10}R' print(text)
実行結果
L123 R L 123R L 123 R
=については次の章で解説します。
空白を任意の文字で埋める: fill
fillを指定することで空白部分を任意の文字で埋めることができます。
num = 123 # 0埋め + 右寄せ text = f'L{num:0>10}R' print(text) # *埋め + 中寄せ text = f'L{num:*^10}R' print(text)
実行結果
L0000000123R L***123****R
しかし、この方法だとフォーマットした値が負の数だった場合、埋め込んだ文字が変な場所に入ってしまう。
num = -123 # 右寄せ + 0埋め text = f'L{num:0>10}R' print(text)
実行結果
L000000-123R
符号の内側に空白を入れたい場合は、=を使う。
num = -123 # 0埋め + 右寄せ text = f'L{num:0=10}R' print(text)
実行結果
L-000000123R
桁区切り: grouping_option
grouping_optionを指定することで数値をカンマで3桁区切りすることができます。grouping_optionに指定できる値は、カンマ(,)、またはアンダースコア(_)のみです。
num = 123456789 # カンマ text = f'{num:,}' print(text) # アンダースコア text = f'{num:_}' print(text)
実行結果
123,456,789 123_456_789
2進数、8進数、16進数の場合は4桁区切りとなり、使用できるのはアンダースコアのみです。
num = 123456789 text = f'{num:_b}' print(text)
実行結果
111_0101_1011_1100_1101_0001_0101
符号: sign
signを指定することで符号を表示させることができます。
指定できる記号は以下の通りです。
| 書式 | 意味 |
|---|---|
| + | 符号を表示 |
| - | 負だった場合に符号を表示 |
p = 123 n = -123 # + p_text = f'{p:+}' n_text = f'{n:+}' print(p_text, n_text) # - p_text = f'{p:-}' n_text = f'{n:-}' print(p_text, n_text)
実行結果
+123 -123 123 -123
小数点以下の桁数: .precision
.precisionを指定することで小数点以下の桁数を指定することができます。
.桁数fの形で指定します。
e = 2.718281828459045 text = f'{e:.0f}' print(text) text = f'{e:.1f}' print(text) text = f'{e:.2f}' print(text) text = f'{e:.3f}' print(text)
実行結果
3 2.7 2.72 2.718
切り捨てではなくて四捨五入される点に注意してください。
まとめ
この記事では、フォーマットする際の書式について解説しました。
書式を設定することで関数などを使わなくても色々な表現をすることができます。たくさんあるので覚えるのは大変ですが、便利なのでぜひ活用してみてください。
それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ


