お困りの方へ
この記事では、文字列の書式を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も使える。
他にも書式操作方法はありますが、上記を覚えておけば問題ないと思います。