Python - 文字列の書式設定

文字列の書式設定 - format 関数

文字列関数 format()を使用すると、文字列中の置換フィールド {} が引数に指定した変数で置換されます。変数が複数ある場合は , で区切って指定することができます。

# 文字列.format(変数) の形式で指定します
s = 'Alice'
i = 25

print('Alice is {} years old'.format(i))
# Alice is 25 years old

print('{} is {} years old'.format(s, i))
# Alice is 25 years old
format 関数を使った出力

文字列中の置換フィールド {} にインデックスを付与することで、引数の順番に応じた値が置換されます。

s = 'Alice'
i = 25

print('{0} is {1} years old / {0}{0}{0}'.format(s, i))
# Alice is 25 years old / AliceAliceAlice
format 関数を使った出力

文字列の先頭に f を付与した場合、文字列中の置換フィールド {} に変数を直接指定できます。ただし、この文字列を使用する場合は、Python 3.6 以上である必要があります。この文字列は、f 文字列 (f-strings、フォーマット文字列、フォーマット済み文字列リテラル) と呼ばれます。

s = 'Alice'
i = 25

print(f'{s} is {i} years old')
# Alice is 25 years old
format 関数を使った出力

文字列中の {} を置換フィールド {} ではなく、通常の括弧として扱いたい場合は、{{, }} としてエスケープします。

print('{} is {} years old / {{xxx}}'.format(s, i))
# Alice is 25 years old / {xxx}
format 関数を使った出力

format() 関数を指定した文字列や、f 文字列の置換フィールド {} 内に書式指定文字列を指定した文字列は、数値を任意の書式にフォーマットして出力できます。

{:書式指定文字列} のように : のあとに書式化文字列を記述します。置換フィールドにインデックスや、名前を指定する場合は、そのあとに :書式指定文字列 を記述します。

number = 0.45
print('{0:.4f} is {0:.2%}'.format(number))
# 0.4500 is 45.00%

print(f'{number:.4f} is {number:.2%}')
# 0.4500 is 45.00%
format 関数を使った出力

書式指定文字列によって様々なフォーマットにすることが可能です。

i = 255

print('left   : {:<8}'.format(i))   # left    : 255        (スペース埋め8桁で左寄せ)
print('center : {:^8}'.format(i))   # center  :   255      (スペース埋め8桁で中央寄せ)
print('right  : {:>8}'.format(i))   # right   :      255   (スペース埋め8桁で右寄せ)
print('zero   : {:08}'.format(i))   # zero    : 00000255   (0埋め8桁)
print('bin    : {:b}'.format(i))    # bin     : 11111111   (2進数)
print('oct    : {:o}'.format(i))    # oct     : 377        (8進数)
print('hex    : {:x}'.format(i))    # hex     : ff         (16進数)

f = 0.1234

print('digit   : {:.2}'.format(f))  # digit   : 0.12       (小数点以下2桁)
print('digit   : {:.6f}'.format(f)) # digit   : 0.123400   (小数点以下6桁で0埋め)
print('exp     : {:.4e}'.format(f)) # exp     : 1.2340e-01 (指数表記)
print('percent : {:.0%}'.format(f)) # percent : 12%        (パーセント表記)
format 関数を使った出力

上記の例は format() 関数ですが、f 文字列でも同様の書式指定文字列が使用できます。

format() 関数と類似した出力仕様に変換指定子 (%d%s などの文字列フォーマット) があります。ただし、Python3 では format() 関数を使った方が好ましいとされています。

関連記事