Pythonのformatメソッドによる文字列フォーマットの方法

今回は Python の文字列フォーマットを行う format メソッドの使い方について説明します。format メソッドは Python 2.6 から追加されたメソッドです。Python では今まで %演算子を使用したフォーマット方法が使われていましたが、format メソッドはそれを拡張したものになります。

%演算子を仕様したフォーマットは今後廃止する可能性があると予告されています。特に理由がない限り format メソッドを使用したほうがいいでしょう。

フォーマットに要素を埋め込む

埋め込む文字列を指定するためには、波括弧 { } を使用します。format の引数に渡した文字列が {} の中に埋め込まれます。

>>> "I am {}.".format("Mike")
'I am Mike.'

複数の要素を埋め込む

複数の要素を埋め込む場合は、 引数を複数指定し対応する {} を記述します。

>>> "Name: {}, Age {}.".format("Mike", 28)
'Name: Mike, Age 28.'

この場合、引数の数と {} の数は同じでなければなりません。 

位置を指定して埋め込む

位置を指定して埋め込む場合は {} の中に引数に対応する数を指定します。指定する数は 0 から始まるので注意してください(第1引数の場合は 0、第2引数の場合は 1 )。また、同じ要素を複数回指定することもできます。

>>> "{0}, {1}, {0}".format("Python", "Ruby")
'Python, Ruby, Python'

辞書の要素を指定した位置に埋め込む

フォーマットには辞書を使用することもできます。辞書を使用する場合は format の引数に辞書を指定します。  {} の中には指定する引数の数と辞書の角括弧 [] の中にキー値を指定します。キー値にはクオテーションを付ける必要ありません。

>>> dict = { "name": "Mike", "age": 28 }
>>> "Name: {0[name]}, Age: {0[age]}".format(dict)
'Name: Mike, Age: 28'

埋め込む文字列のフォーマットを指定する

format メソッドは単に文字列を埋め込めるだけでなく、オプションを指定して文字列の整形して埋め込むことができます。オプションは {} 中の後方にコロン :  を付けて指定します。

{引数のインデックス:オプション} あるいは {:オプション}

以下の項目では使用可能なオプションとその使用方法について紹介していきます。

左・右・中央寄せで埋め込む

文字列の位置を整形して埋め込むには、以下のオプションを使用します。

<要素を左詰めし、残りの幅をスペースで埋める
>要素を右詰めし、残りの幅をスペースで埋める
=要素を中央寄せし、残りの幅をスペースで埋める

これらのオプションは指定した {} の値の後にコロン : を付け、さらにその後ろにオプションと幅を指定します。

>>> "{:<10}".format("left")
'left      '
>>> "{:>10}".format("right")
'     right'
>>> "{:^10}".format("center")
'  center  '
"{:<10} {:^10} {:>10}".format("left", "center", "right")
'left         center        right'

上の例では、10文字の幅の中に要素が寄せられて埋め込まれています。このとき指定した幅が要素より小さい場合は、そのまま引数で指定した文字列が埋め込まれます。

また、スペース以外の文字で詰め込む場合は、オプションの前に詰め込む文字を指定します。

>>> "{0:-^30}".format("center")
'------------center------------'

0埋めで数値を埋め込む

左寄せのオプションを応用すれば、0 で詰めて数値を埋め込むことできます。

>>> "{0:0>10}".format(10000)
'0000010000'
>>> "{0:0>10}".format(100)
'0000000100'

数値に符号を付けて埋め込む

数値に符号を付けて整形する場合は以下のオプションを指定します。

+整数、負数の両方の数値に符号を付ける
-負数の数値にのみ符号を付ける
空白数値が整数の場合は空白、負数の場合は符号を付ける

以下はこれらのオプションを使用した例です。

>>> "{:+}".format(10)
'+10'
>>> "{:+}".format(-10)
'-10'
>>> "{:-}".format(10)
'10'
>>> "{:-}".format(-10)
'-10'
>>> "{: }".format(10)
' 10'
>>> "{: }".format(-10)
'-10'

これらのオプションは数値にのみしか適用できません。数値以外のものを引数に指定するとエラーになります。

整数をn進数で埋め込む

基数を変換して数値を埋め込むときは以下のオプションを指定します。

b2進数として数値を埋め込む
o8進数として数値を埋め込む
d10進数として数値を埋め込む
x16進数として数値を埋め込む

x を指定した場合、16進数のアルファベットは小文字になりますが X を指定すれば大文字で埋め込まれます。

以下はこれらのオプションを使用した例です。

>>> "{:b}".format(10)
'1010'
>>> "{:d}".format(10)
'10'
>>> "{:o}".format(10)
'12'
>>> "{:x}".format(10)
'a'
>>> "{:X}".format(10)
'A'

これらオプションは数値にのみ有効です。

数値の千の位にカンマを挿入して埋め込む

1,000,000 のように数値の千の位ごとにカンマを挿入するためには、カンマ , のオプションを使用します。

>>> "{:,}".format(123456789)
'123,456,789'

小数点以下の桁数を指定して埋め込む

少数点以下の桁数を指定して埋め込むときは、f オプションを使用します。

>>> "{:.1f}".format(0.82)
'0.8'
>>> "{:.2f}".format(0.82)
'0.82'
>>> "{:.3f}".format(0.82)
'0.820'
>>> "{:.4f}".format(0.82)
'0.8200'

引数の桁数が指定した桁数より大きい場合は、値が切り捨てられます。

パーセンテージで埋め込む

数値をパーセンテージに変換して埋め込む場合は、パーセンテージ % のオプションを指定します。

>>> "{:.2%}".format(0.82)
'82.00%'
>>> "{:.1%}".format(0.82)
'82.0%'