【Python】f文字列

2023年1月12日

Pythonのf文字列について解説します。

f文字列とは

数値や文字列などを画面やファイルに出力する際に、桁数や基数を指定する書式化が必要になってきます。

Pythonでの書式化にはいろいろな方法がありますが現在はf文字列(成形済み文字列リテラル)が主流となっています。

コード例

# f文字列による画面への表示

a, b = 1, 2

print(f'a = {a}, b = {b}')
print(f'{a} + {b} = {a + b}')

実行結果

a = 1, b = 2
1 + 2 = 3

f文字列では前置きとしてfまたはFを付けたf’…’またはF’…’という形式で書きます。

この形式の最大のメリットは式を直接埋め込めることです。

埋め込み方は上のコードのようにf文字列の中に{}の中に式を入れた{式}と書くだけです。

f文字列で桁数指定

f文字列の{}内の式の後ろにはコロン文字:を付けて書式指定ができます。

コード例

# f文字列による桁数指定とコンマ区切り

n = 12345

print(f'n = {n:3}') # 少なくとも3桁
print(f'n = {n:5}') # 少なくとも5桁
print(f'n = {n:8}') # 少なくとも8桁
print(f'n = {n:,}') # 3桁ごとに,で区切る

実行結果

n = 12345
n = 12345
n =    12345
n = 12,345

:の後ろに表示させたい桁数の数字を入れることで実現できます。

指定桁数がその値の桁数より少ない場合はその値の桁数になるようになっています。

上のコードの場合指定桁数3ですが実際に表示されているのはnの5桁です。

指定桁数がその値の桁数より多い場合は足りない桁はスペース文字’ 'で埋められるようになっています。

:の後ろにコンマ文字,にすることで3桁ごとに,で区切って表示されます。

桁数だけでなく基数の指定もできます。

コード例

# f文字列による基数の指定

n = 123

print(f'n(2進数)  = {n:b}') # 2進数
print(f'n(8進数)  = {n:o}') # 8進数
print(f'n(10進数) = {n}')   # 10進数
print(f'n(16進数) = {n:x}') # 16進数(小文字)
print(f'n(16進数) = {n:X}') # 16進数(大文字)

実行結果

n(2進数)  = 1111011
n(8進数)  = 173
n(10進数) = 123
n(16進数) = 7b
n(16進数) = 7B

桁数と同じく基数も:の後ろに入力することで指定できます。

bは2進数、oは8進数、xは16進数で大文字で指定すれば表示も大文字になります。

省略した場合はdの10進数となります。

f文字列で小数の精度表示

f文字列の書式指定は小数にも適応できます。

指定方法は桁数や基数と同じくコロン文字:の後に記述します。

コード例

# f文字列による小数の書式化(その1)

f1 = 3.14

print(f'f1 = {f1:e}') # 指数形式
print(f'f1 = {f1:f}') # 固定小数点形式
print(f'f1 = {f1:g}') # 形式を自動判別

実行結果

f1 = 3.140000e+00
f1 = 3.140000
f1 = 3.14

指数形式のeも固定小数点形式のfも既定の精度は6になっています。

gは固定小数点形式か指数形式で表示するかを自動で決めてくれます。

次は精度を指定して小数を表示します。

コード例

# f文字列による小数の書式化(その2)

f1 = 3.14

print(f'f1 = {f1:.8f}')   # 精度は8
print(f'f1 = {f1:12f}')   # 全体で12
print(f'f1 = {f1:12.8f}') # 全体で12+精度は8

実行結果

f1 = 3.14000000
f1 =     3.140000
f1 =   3.14000000

固定小数点形式のfの前に.8と指定することで精度が8となり、12と指定することで全体で有効数字12になります。

さらに12.8とすることで全体で有効数字12でなおかつ精度が8で表示されます。

省略したfはこの場合だと.2とみなされます。

空いた桁にはスペース文字’ 'が埋められます。

小数部を省略させることもできます。

コード例

# f文字列による小数の書式化(その3)

f2 = 3.0

print(f'f2 = {f2:.0f}')  # 小数部がなければ省略
print(f'f2 = {f2:#.0f}') # 小数部がなくても小数点

実行結果

f2 = 3
f2 = 3.

f文字列で左右中央寄せと0で埋める

f文字列の書式指定では桁数などの指定の他に左右や中央に寄せることもできます。

コード例

# 左寄せ・右寄せ・中央寄せと符号の後ろにスペース

c1 = -5

print(f'{c1:<10}') # 左寄せ
print(f'{c1:>10}') # 右寄せ
print(f'{c1:^10}') # 中央寄せ
print(f'{c1:=10}') # 符号の後ろに空白文字

実行結果

-5
        -5
    -5
-        5

:の後ろに<で左寄せ、>で右寄せ、^で中央寄せ、=で符号の後ろに空白文字を入れます。

それらの後ろに表示させたい文字数を入力します。

空白はスペース文字’ 'で埋められます。

次に指定した文字で空白を埋める方法です。

コード例

# f文字列で空白を0で埋める

c2 = 111

print(f'{c2:0<9}') # 左寄せ
print(f'{c2:0>9}') # 右寄せ
print(f'{c2:0^9}') # 中央寄せ

実行結果

111000000
000000111
000111000

:の後ろで<や>や^の前に埋めたい文字を入力することでその文字で空白を埋めます。

今回は0で埋めましたが*などの記号などでもいいです。

f文字列の書式指定一覧

書式
指定
内容
'b’ 2進数
'o’ 8進数
'x’
'X’
16進数
'x’で小文字、
'X’で大文字
'e’
'E’
指数形式
(既定の精度は6)
'f’
'F’
固定小数点形式
(既定の精度は6)
'g’
'G’
指定した精度に変換可能なら固定小数点形式
不可なら指数形式
'c’ 数値に対応するUnicode文字に変換
's’ 文字列
'%’ 固定小数点形式に100倍した百分率に
パーセント記号%を付ける
'<' 左寄せ
'>’ 右寄せ
'^’ 中央寄せ
'=’ 符号がある場合
符号の後ろを空白文字で埋める
'+’ 先頭に符号文字('+’か’-')
を付ける
'-' 負の数にのみ
先頭に’-'を付ける
' ' 正の数の前にスペース文字’ '
負の数の前に’-'を付ける

Python

Posted by ほりえりお