Pythonでformat関数を使った文字列の出力

Pythonでformat関数を使った文字列の出力

Pythonに関わらず変数の内容を出力したい、特定のフォーマットに当てはめて出力したいといったことは度々あるかと思います。出力するのはPrint関数だったり各種ロガーの役割だったりしますが、そのお膳立てをするため、ここではPythonにおける文字列の整形方法を採り上げます。

Pythonで変数を文字列に埋め込むにはformat関数のほかに%演算子を使った記法がありが、ここではformat関数にフォーカスして説明します。

format関数

format関数とは、文字列の中に”ここ”に値を入れたいという場所を示しておいてformat関数によってそこに変数の値を差し替えてもらうものです。

tenki = "晴れ"
'今日の天気は、{}の予報です。'.format(tenki)

このように書くことで、{}の部分がtenki変数の中身である「晴れ」に置き換えられて、「今日の天気は、晴れの予報です。」という文字列が作られます。実際には、print関数に与えないとこの文字列はただただ文字列として作られただけで、どこにもお披露目されません。

format関数の構文

format関数の構文をもう少し詳しく見ていきます。

先ほど例だとtenkiという変数1つだけを当てはめましたが、普通は1冊100円のノートを3冊買いました。そうすると「1冊100円のノートを3冊買ったので300円支払いました」のように1つの文字列の中に複数の変数を当てはめたい時もありますね。

最も簡単な方法は、次のようにします。

price = 100
amount = 3
total = price * amount
"1冊{0}円のノートを{1}冊買ったので{2}円支払いました".format(price, amount, total)

{}の中の数字が、format関数の引数の順に当てはめられます。

その他、キーワードでの指定や辞書やリストなどを使うことも可能です。

"{val1}, {val2}, {val3}".format(val1=price, val2=amount, val3=total) 
"{x1},{x2},{x3}".format(**{'x1':price, 'x2':amount, 'x3':total})
"{0[0]}, {0[1]}, {1[0]}".format([100, 3], [300]) 

単にその場限りで中身を整形して出力したいだけなら、最初の添え字の例が一番素直で入力数も少なく使いやすいかも知れません。でも、例えばエラーの情報のように何らかの仕組みを用意していて辞書が渡ってくるとかであれば、その方がコードの見た目が分かりやすくなることもあります。

errors = {"code": "xxx-001", "message": "file not found"}
print("問題が検出されました code: {code}, message: {message}".format(**errors))

このほか、実際にやるとほとんどカオスですが、リストやタプルなども使用可能です。

print("{0[0]}円のノートを{0[1]}冊買うのに{1[0]}円持って行きました".format([100, 3], [300])) 

format関数の書式指定

ここまでは単純な当てはめだけを例にしてきましたが、実際に使う時には数値の出力で進数を指定したり、ログ出力のような例で、ファイル名や関数名にあらかじめ幅を設けておいて、各情報の始まる位置を定めたり、右寄せ、左寄せ、中央寄せのようなこともあるかも知れません。

すべては紹介しきれませんので、ここに掲載した以外のものについては、書式指定文字列の文法でご確認頂ければと思います。

それではまずは進数の指定です。

型名説明
b 2進数
d 10進数
o 8進数
x16進数
10進で9を超える数字には小文字が使われます
X16進数
10進で9を越える数字には大文字が使われます
number = 255
print('2進数:{0:b}, 8進数:{0:o}, 10進数:{0}, 16進数:{0:X}'.format(number))

続いて幅と位置の指定です。

型名説明
<幅指定の幅を取り、位置は左寄せ
>幅指定の幅を取り、位置は右寄せ
^幅指定の幅を取り、位置は中央寄せ
string1 = '左寄せ'
string2 = '中央寄せ'
string3 = '右寄せ'

print('{0:<20}'.format(string1))
print('{0:^20}'.format(string2))
print('{0:>20}'.format(string3))

まとめ

format関数をの使い方をみてきました。まだまだ他にもよく使うものがあるとおもいます。適宜記事の内容を継ぎ足していこうと思います。

文字列を整形するのに+で結合していくのはとてもとても見た目にも、キー入力的にも億劫なものです。上手く使いこなして快適なprint関数生活を送りましょう。