Python 文字列の書式指定とフォーマット

Python の文字列の概要については「Python の文字列」をみてください。

Python で文字列をフォーマットする方法は何種類かあります。

f-String によるフォーマット

フォーマット文字列に f をつけると、文字列リテラルに変数を埋め込むことができます。これを f-String (f 文字列) といいます。

f String では、文字列中に {変数名} と記述することでその箇所に指定した変数の値が入ります。

>>> a = 'Hello'
>>> b = 'world'
>>> f'{a}, {b}!' # 先頭に f を付ける
'Hello, world!'

format 関数によるフォーマット

次の方法はformat()関数を使う方法です。主に数値のフォーマットに使います。

フォーマット文字列の中で {n} とすることで、format() 関数へ渡した変数のインデックスを指定できます。

番号付けを行わない場合は {} 出現位置の順番に自動的に番号付けされます。最初の {}がインデックス 0 で、次が 1 という具合です。

>>> i = 333
>>> j = 777
>>> '{0} {1}'.format(i,j)
'333 777'
>>> '{} {}'.format(i,j)
'333 777'
>>> '{1} {0}'.format(i,j)
'777 333'

番号付けの省略と明示的な指定は混在させることはできません。例えば '{1} {}' と指定するとエラーになります。

{}ではインデックス番号ではなく、キーワードで指定することもできます。format 関数の引数で、キーワードに対する値を設定します。

>>> x = 'John'
>>> 'Hi, {name}!'.format(name=x)
'Hi, John!'

フォーマットの指定は、フォーマット文字列中の{} 内にコロンに続けて、フォーマットを指定します。

書式指定意味
s文字列。(省略しても同様)
>>> '{:10s}'.format('Hello')
'Hello     '
>>> '{:10}'.format('Hello')
'Hello     '
<利用可能な幅の中で左寄せ
>>> 'Hi, {name:<5}!'.format(name='Bob')
'Hi, Bob  !'
>利用可能な幅の中で右寄せ
>>> 'Hi, {name:>5}!'.format(name='Bob')
'Hi,   Bob!'
^利用可能な幅の中で中央表示
>>> 'Hi, {name:^5}!'.format(name='Bob')
'Hi,  Bob !'
=左端に符号を表示
>>> '{:=6.1f}'.format(-1.23)
'-  1.2'
>>> '{:=6.1f}'.format(1.23)
'   1.2'
+正の数の場合に + の符号を表示
>>> '{:=+6.1f}'.format(1.23)
'+  1.2'
' '空白文字は正の数の場合はスペースを表示し、負の場合は - を表示
>>> '{: }'.format(123)
' 123'
>>> '{: }'.format(-123)
'-123'
,3桁毎にカンマ , を表示
>>> '{:,}'.format(1234567)
'1,234,567'
_3桁毎にアンダスコア _を表示
>>> '{:_}'.format(1234567)
'1_234_567'
b2進数で表示
>>> '{:b}'.format(5)
'101'
d10進数で表示
>>> '{:5d}'.format(123)
'  123'
表示幅は書式指定の前の数字で行います。
e数値を科学表記 (指数を小文字のeで記載)
>>> '{:.2e}'.format(120)
'1.20e+02'
E数値を科学表記 (指数を大文字のeで記載)
>>> '{:.2E}'.format(120)
'1.20E+02'
f小数点表記。 m.nf とすることで、全部で m 文字幅、小数点以下 n 桁として指定 (m は省略可)。
>>> '{:.2f}'.format(3.1415)
'3.14'
>>> '{:.2f}'.format(7)
'7.00'
>>> '{:f}'.format(float('inf'))
'inf'

\(\infty\) を表す inf や数字ではないことを示す NaN (Not a Number) などの文字は小文字で表記。

F小数点表記。基本的に f と同一であるが、文字表記が大文字になる。
>>> '{:F}'.format(float('inf'))
'INF'
>>> '{:F}'.format(float('nan'))
'NAN'
g一般表記。小数点表記または科学表記。指数表示の e は小文字。
>>> '{:g}'.format(1.23)
'1.23'
>>> '{:g}'.format(12)
'12'
>>> '{:g}'.format(1.0)
'1'
>>> '{:g}'.format(1230000)
'1.23e+06'
G一般表記。小数点表記または科学表記。指数表示の E は大文字。
o8進数表記
>>> '{:o}'.format(11)
'13'
x16進数表記。アルファベットは小文字。
>>> '{:x}'.format(26)
'1a'
X16進数表記。アルファベットは大文字。
>>> '{:X}'.format(26)
'1A'
%パーセント表記 (100倍して % 記号を付ける)
>>> '{:%}'.format(0.84)
'84.000000%'
>>> '{:.0%}'.format(0.84)
'84%'
cユニコードの文字に変換
>>> '{:c}'.format(0x0394)
'Δ'

% 演算子によるフォーマット

フォーマット文字列に % を付けパラメータリストを渡すことで、format() 関数と同様にフォーマットできます。

ただし、フォーマット文字列中では % に続けて書式指定を書きます。

>>> '%s %.2f' % ('pi = ', 3.1415)
'pi =  3.14'

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Python 入門