お困りの方へ
この記事では、文字列の書式をstr.formatを使って設定する方法を説明します。
文字列の幅や桁を揃えることでログが見やすくなるので、テクニックを取得しましょう。
書式指定文字列の文法のサイトです。
str.formatの基本
文字列.formatで文字列の書式操作を行います。
この文字列部分は、通常の文字と{}で区切られた置換フィールドで構成されます。
print('{0} {1} {2} {3}'.format('a', 'b', 1, 2))
# a b 1 2
# 置換フィールドは位置引数のインデックスナンバーで指定できる。
print('{0} {1} {0} {1}'.format('a', 'b', 1, 2))
# a b a b
# 置換フィールドは位置引数のインデックスナンバーで指定できる。
print('{0} {1} {2} {3} {4}'.format('a', 'b', 1, 2))
# IndexError: Replacement index 4 out of range for positional args tuple
# 置換フィールドの数に対して、引数の数が足りない場合はエラーになる。
print('{} {} {} {}'.format('a', 'b', 1, 2))
# a b 1 2
# 置換フィールドの数字は省略できる。
書式の指定方法
左詰め・右詰め・中央寄せ
アライメントの指定方法と、何かの文字で埋める方法です。
print('|{:<20}|'.format('left'))
# |left |
# <:左詰め
print('|{:>20}|'.format('right'))
# | right|
# >:右詰め
print('|{:^20}|'.format('center'))
# | center |
# ^:中央寄せ
print('|{:-^20}|'.format('center'))
# |-------center-------|
# "-"で埋める。
print('|{:*^20}|'.format('center'))
# |*******center*******|
# "*"で埋める。
上のコードの左右の”|“は見やすくするためのもので、オプションではありません。
符号
正数・負数に対する符号の付け方の指定です。
print('|{:+}|{:+}|{:+}|'.format(100, -100, 0))
# |+100|-100|+0|
# +:正数・負数の両方に符号を付ける。
print('|{:-}|{:-}|{:-}|'.format(100, -100, 0))
# |100|-100|0|
# -:負数にのみ符号を付ける。
print('|{: }|{: }|{: }|'.format(100, -100, 0))
#| 100|-100| 0|
# スペース:負数にのみ符号を付け、正数の前に空白を付ける。
1000の位の桁区切り
1000の位で桁区切りのカンマを付ける方法です。
print('{:,}'.format(987654321))
# 987,654,321
小数点以下の桁数
小数点以下の桁数と文字列の幅の決め方です。
print('{:10.2f}'.format(4444.4444))
print('{:10.2f}'.format(5555.5555))
# 4444.44
# 5555.56
# 指定桁数以降は四捨五入される。
print('{:10.0f}'.format(4444.4444))
print('{:10.0f}'.format(5555.5555))
# 4444
# 5556
# 整数部分のみの表示も可能。
print('{:10,.2f}'.format(5555.5555))
# 5,555.56
# 1000の桁のカンマ区切りも併用可能。
パーセント表示
print('{:.2%}'.format(0.555555))
# 55.56%
print('{:.2f}%'.format(0.555555 * 100))
# 55.56%
# %を使わなくても同じことができる。
10進数・8進数・16進数・2進数
メモリのアドレスを表示させてデバッグされる方は16進数を使うこともあると思います。
for num in range(7, 18):
print('dec:{0:2d} oct:{0:2o} hex:{0:2x} HEX:{0:2X} bin:{0:06b}'.format(num))
# dec: 7 oct: 7 hex: 7 HEX: 7 bin:000111
# dec: 8 oct:10 hex: 8 HEX: 8 bin:001000
# dec: 9 oct:11 hex: 9 HEX: 9 bin:001001
# dec:10 oct:12 hex: a HEX: A bin:001010
# dec:11 oct:13 hex: b HEX: B bin:001011
# dec:12 oct:14 hex: c HEX: C bin:001100
# dec:13 oct:15 hex: d HEX: D bin:001101
# dec:14 oct:16 hex: e HEX: E bin:001110
# dec:15 oct:17 hex: f HEX: F bin:001111
# dec:16 oct:20 hex:10 HEX:10 bin:010000
# dec:17 oct:21 hex:11 HEX:11 bin:010001
指数表記
print('{:e}'.format(0.001))
# 1.000000e-03
print('{:e}'.format(0.1**10))
# 1.000000e-10
print('{:e}'.format(1000))
# 1.000000e+03
print('{:e}'.format(10**10))
# 1.000000e+10
print('{:E}'.format(0.001))
# 1.000000E-03
# 大文字のEも使える。
他にも書式操作方法はありますが、上記を覚えておけば問題ないと思います。
