Python PR

【Python】フォーマット時の書式の設定

記事内に商品プロモーションを含む場合があります

この記事では、文字列に値をフォーマットした際に設定できる書式について解説します。

書式を設定することで「0埋め」したり「幅を設定」したり様々な表現をすることができます。

フォーマットについては以下の記事を参考にしてください。

Link文字列に値を埋め込む方法【フォーマット】

それでは、書式の設定方法を見ていきましょう!

書式の基本

書式は、書式指定文字列の置換フィールド({})内を:で区切った右側に指定します。

# 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

切り捨てではなくて四捨五入される点に注意してください。

まとめ

この記事では、フォーマットする際の書式について解説しました。

書式を設定することで関数などを使わなくても色々な表現をすることができます。たくさんあるので覚えるのは大変ですが、便利なのでぜひ活用してみてください。

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ