python format関数で出力の桁数指定・0埋め

pythonでprint()を用いて数値や文字列などを表示する際にformat関数を用いて出力を整形する手法についてまとめました。

基本的な使い方

format()関数は基本的にこのように使います。

output = "整形するためのオプション文字列".format("整形したい文字列")

以下に例を示します。

print( "time = {}:{}:{}".format( 12, 34, 56 ) )   # 波括弧の中に順に数値・文字列が展開される
print( "time = {hour}:{minute}:{second}".format( hour=12, minute=34, second=56 ) )   # 波括弧に名前をつけることも可
print( "list = {{ {}, {} }}".format( 12, 34 ) )   # 出力に波括弧を使いたい場合は {{, }} でエスケープ
----------
time = 12:34:56
time = 12:34:56
list = { 12, 34 }

format関数は波括弧{ }で囲まれた中に数値や文字列を展開します。
必要に応じて波括弧{ }内に整形オプションを記述することで、数値・文字列を整形することができます。
波括弧{ }外の文字列はそのままコピーさます。
波括弧{ }自身を出力したい場合は二重波括弧でエスケープする必要があります。   { → {{ ,   } → }}

桁数指定

print( "{:10}".format("12345") )   # 文字列
print( "{:10}".format(12345) )     # int
print( "{:10}".format(-123.45) )   #float
----------
12345        # 文字列は左寄せ
     12345   # 数値は右寄せ
   -123.45   # 符号や小数点も1文字とカウント

:(コロン)の後に桁数を指定します。
右寄せ・左寄せなどのオプションを使用しなかった場合のデフォルトでは、文字列の場合は左寄せに、数値の場合は右寄せとなります。
符号や小数点も文字数にカウントされます。

右寄せ・左寄せ・中央寄せ

print( "{:<10}".format(12345) )
print( "{:^10}".format(12345) )
print( "{:>10}".format(12345) )
----------
12345        # 左寄せ
  12345      # 中央寄せ
     12345   # 右寄せ

右寄せ・左寄せ・中央寄せを指定するには、:(コロン)の後ろに <, ^, > 文字を指定します。

先ほども書きましたが何も指定しなかった場合、文字列→左寄せ、数値→右寄せとなります。

0埋め

print( "{:0<10}".format("12345") )
print( "{:0^10}".format(12345) )
print( "{:0>10}".format(-12.345) )
print( "{:0=10}".format(-12.345) )
print( "{:M<10}".format(-12.345) )   # 0以外の文字列でも可
----------
1234500000
0012345000
000-12.345   # 右寄せでの0埋め
-00012.345   # 符号の後ろを埋める
-12.345MMM

先ほどの桁数指定で余った空白を指定した文字で埋めます。(上記の例では”0″で埋めています。)
符号付きの数値の場合、右寄せ&0埋め指定をすると符号の前に0が入ります。
符号のすぐ後ろを0で埋めるためには=(イコール)を使います

固定小数点表記

print( "{:f}".format(1.23456789) )
print( "{:.2f}".format(1.23456789) )
print( "{:>10.3f}".format(-1.23456789) )
----------
1.234568   # デフォルトでは6桁に丸められる(1.234567ではない)
1.23
     -1.23 # 桁数指定+小数点以下の桁数指定

小数点以下の桁数を指定するためには、:(コロン)の後にfを指定します。

2進数・10進数・16進数表記など

print( "{:b}".format(1234) )   # 2進数
print( "{:o}".format(1234) )   # 8進数
print( "{:x}".format(1234) )   #16進数(英字部を小文字)
print( "{:X}".format(1234) )   #16進数(英字部を大文字)
----------
10011010010
2322
4d2
4D2

数値を2進数・10進数・16進数などに変換します。
16進数については x と X の二種類があり、英字部を大文字で表現するか小文字で表現するかの使いわけができます。

使用できる整数の表現型は以下の通りです。

‘b’2進数。
‘c’数値を対応する Unicode 文字に変換。
‘d’10進数。
‘o’8進数。
‘x’16進数。英字部(abcdef)は小文字が使われる。
‘X’16進数。英字部(ABCDEF)は大文字が使われる。
‘n’現在のロケールに従い、区切り文字を挿入する。それ以外は’d’と同じ
None何も指定しなければ’d’と同じ。

符号のオプション

print( "{}".format(12345) )     # 何も指定しない
print( "{}".format(-12345) )
print( "{:+}".format(12345) )   # '+' を指定
print( "{:+}".format(-12345) )
print( "{:-}".format(12345) )   # '-' を指定
print( "{:-}".format(-12345) )
print( "{: }".format(12345) )   # ' ' を指定
print( "{: }".format(-12345) )
----------
12345    # デフォルトの挙動 負数にのみ符号'-'がつく
-12345
+12345   # 正数にも明示的に符号'+'をつける
-12345
12345    # 負数にのみ符号'-'がつく (デフォルトの挙動)
-12345
 12345   # 正数には空白を付与する
-12345

数値の符号は、デフォルトでは負数にのみ符号’-‘がつくようになっています。
‘+’を指定することで、正数にも明示的にプラスの符号’+’をつけることができます。
‘ ‘(スペース)を指定すると、正数には先頭に’ ‘(スペース)がつきます。(負数のマイナスと文字数を合わせるためのスペースです。)

‘+’正数にも明示的に符号’+’をつける。
‘-‘負数にのみ符号’-‘をつける。(デフォルトNoneと同じ挙動)
‘ ‘負数には符号’-‘を、正数には’ ‘(スペース)をつける。
None負数にのみ符号’-‘をつける。デフォルトの挙動。

パーセント表示

print( "{:%}".format(0.123) )
print( "{:.2%}".format(0.123) )
-----
12.300000%
12.30%

:(コロン)の後に%を指定すると、パーセント表示をすることができます。

金額表示

print( "{:,}".format(12345678) )
----------
123,456,789

:(コロン)の後に,(カンマ)を指定すると、3桁毎にカンマをつけることができます。

以上、pythonでformatクラスを用いて数値や文字列を整形する方法についてでした。