Pythonのstr.formatは文字列型の便利な出力機能です。
str.formatでよく使う構文をまとめました。
str.formatを利用した文字列出力
{}で文字列中に変数の内容を埋め込むことができます。
1 2 3 |
name = '佐藤' print('{}さん'.format(name)) # 佐藤さん |
{}内に数値を使用することにより、埋め込む変数の順番を指定できます。
1 2 3 4 |
greetings = 'こんにちは' name = '佐藤' print('{1}さん、{0}'.format(greetings, name)) # 佐藤さん、こんにちは |
{}内に名前を設定して、名前から埋め込む変数を指定できます。
1 2 3 4 |
greetings = 'こんにちは' name = '佐藤' print('{name}さん、{greetings}'.format(name=name, greetings=greetings)) # 佐藤さん、こんにちは |
{}内に名前を設定する方法を応用すると
dictionaryを展開して、値を埋め込むことができます。
1 2 3 |
dic = {'name': '佐藤', 'greetings': 'おはよう'} print('{name}さん、{greetings}'.format(**dic)) # 佐藤さん、おはよう |
右寄せ、左寄せ、中央寄せ
右寄せには>を使用します。
>の前に文字を指定すると、指定した文字で埋めます。
0でパディングもできます。
1 2 3 4 5 |
print('{:>10}'.format('right')) # ' right' print('{:#>10}'.format('right')) # '#####right' print('{:0>10}'.format(23)) # 0000000023 |
左寄せには<を使用します。
<の前に文字を指定すると、指定した文字で埋めます。
1 2 3 |
print('{:<10}'.format('left')) # 'left ' print('{:#<10}'.format('left')) # 'left######' |
中央寄せには^を使用します。
^の前に文字を指定すると、指定した文字で埋めます。
1 2 3 |
print('{:^10}'.format('center')) # ' center ' print('{:#^10}'.format('center')) # '##center##' |
小数点以下の表示指定
小数点以下の表示桁数を指定するには.[桁数]fを使用します。
1 2 3 |
print('{:.2f}'.format(10 / 3)) # 3.33 print('{:.5f}'.format(10 / 3)) # 3.33333 |
パーセント表示
パーセント表示には{}に%を使用します。
1 2 3 |
print('{:%}'.format(0.1)) # 10.000000% print('{:.0%}'.format(0.1)) # 10% |
formatを使う利点
dictionaryを文字列内に展開する方法を
str.format、%演算子、+演算子を使用して
それぞれ書いてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
person = {'name': '佐藤', 'age': 20, "gender": '男性', "tel": '0000-0000-0000', 'mail': 'example@example.com'} # formatを使う print(""" 名前:{name} 年齢:{age} 性別:{gender} 電話番号:{tel} メールアドレス:{mail} """.format(**person)) # %演算子を使用する print(""" 名前:%s 年齢:%d 性別:%s 電話番号:%s メールアドレス:%s """ % (person['name'], person['age'], person['gender'], person['tel'], person['mail']) ) # +演算子で結合 print('名前:' + person['name'] + '\n' + '年齢:' + str(person['age']) + '\n' + '性別:' + person['gender'] + '\n' + '電話番号:' + person['tel'] + '\n' + 'メールアドレス:' + person['mail']) # 名前:佐藤 # 年齢:20 # 性別:男性 # 電話番号:0000-0000-0000 # メールアドレス:example@example.com |
上記はかなり極端な例ですが、formatメソッドを利用すると下記の
利点があります。
- 出力する文字列の構造を把握しやすい
- 数値を文字列に使用するときも、変数の型や型変換を意識する必要がない
公式ドキュメントの4.7.2. printf 形式の文字列書式化(%演算子を使用した出力)で
以下の注釈があります。
注釈 ここで述べる書式化演算には様々な癖があり、よく間違いの元になっています (タプルや辞書を正しく表示できないなど)。新しい フォーマット文字列リテラル や str.format() インタフェースの方が間違いにくく、より強力で、柔軟で、さらに拡張可能です。
短めの文字列出力であれば%演算子、+演算子でも良いと思います。
長めの文字列に変数を埋め込む場合など
出力文字列の構造が複雑になるときは公式ドキュメントでもおすすめされている
str.formatを活用しましょう。
コメント