Pythonの文字列で値を変えたいときに使えるのが書式化のformatメソッドです。文字列の指定した位置に値を代入できます。
for文でループさせるときなどにも使える方法なので知っておくととっても便利です。
書式化とは?
書式とは文書や書類の定められた様式のことです。日本語でもフォーマットを作成するという言い方をしますね。
フォーマット(書式)を作ると文章の大枠ができると考えておきましょう。
その大枠に従って必要な部分を変更するとゼロら資料を作るより簡単になりますし、資料の書き方も統一されるので見やすくなります。
今回紹介するformatメソッドは文字列を書式化するためのものです。
文字列は変更不可(イミュータブル)という性質を持っていますが、このメソッドを使うと一部を変更できます。
formatメソッドの使い方
- 文字列内に波カッコ
{ }
を挿入 - 波カッコを複数使うことも可能
- 波カッコの番号を指定することも可能
基本の使い方
文字列内に入力した波カッコ({})に指定した文字が置換されます。
数値の場合はクォートがあってもなくてもエラーにはなりませんが、文字列を置換する場合はクォートをつけましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
>>> bun = '{}年生まれ' >>> bun.format(2002) '2002年生まれ' >>> bun.format('2002') '2002年生まれ' >>> bun.format('二〇〇二') '二〇〇二年生まれ' >>> bun.format(二〇〇二) NameError: name '二〇〇二' is not defined |
複数置換する場合
波カッコを複数書くことで順番に置換できます。2つ目のように波カッコの中にインデックスを書くこともできます。
formatメソッドの引数の順番と波カッコに置換する順番が同じであればインデックスを省略できますが、もし順番が異なるのであれば3つ目の例のように書いておきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#インデックスなし >>> bun = '{}は{}年{}月生まれ' >>> bun.format('トム', 2002, 4) 'トムは2002年4月生まれ' #インデックスあり >>> bun2 = '{0}は{1}年{2}月生まれ' >>> bun2.format('トム', 2002, 4) 'トムは2002年4月生まれ' #順番を変えることができる >>> bun3 = '{2}は{0}年{1}月生まれ' >>> bun3.format(2002, 4, 'トム') 'トムは2002年4月生まれ' |
書式設定
書式の書き方
- 「{インデックス:書式設定}」と書く
- コロン(:)の後ろに書式設定を書き込めます。
- インデックスは省略可能
文字列の桁数
オプションに続けて整数を書くと文字列の置換設定ができます。
文字列str型にしか適応されないので要注意です。
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 |
#桁数指定 >>> '{:.4}'.format('abcdef') 'abcd' >>> '{:.10}'.format('abcdef') 'abcdef' #左揃え(省略可) >>> '{:<10}'.format('abcdef') 'abcdef ' >>> '{:10}'.format('abcdef') 'abcdef ' #右揃え >>> '{:>10}'.format('abcdef') ' abcdef' #中央寄せ >>> '{:^10}'.format('abcdef') ' abcdef ' #整数(int型)には使えない書き方 >>> '{:.4}'.format(123456) ValueError: Precision not allowed in integer format specifier #文字列(str型)にすればOK >>> '{:.4}'.format('123456') '1234' |
整数の置換
- 整数を扱うなら「d」をつける
- 左右中央揃えはできるが桁数は削れない
- 「<,>,^」は使えるが「.」は使えない
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#桁数以下なら変化なし >>> '{:4d}'.format(123456) '123456' #右揃え(省略可) >>> '{:10d}'.format(123456) ' 123456' >>> '{:>10d}'.format(123456) ' 123456' #左揃え >>> '{:<10d}'.format(123456) '123456 ' #中央揃え >>> '{:^10d}'.format(123456) ' 123456 ' #ピリオドは使えない >>> '{:.4d}'.format(123456) ValueError: Precision not allowed in integer format specifier |
小数の置換
- 小数を扱うなら「f」をつける
- 左右中央揃えはできない
- 小数点以下にゼロが追加される
- 「.」で小数点以下の桁数を指定できる
- 四捨五入されて表示される
以下は小数第1位まで表示しています。小数第2位は四捨五入されています。また、小数を扱うので「f」がついています。
1 2 3 4 5 6 |
>>> "{:.1f}".format(0.01) '0.0' >>> "{:.1f}".format(0.08) '0.1' >>> "{:.5f}".format(0.08) '0.08000' |
小数では左右中央揃えできません。小数点以下にゼロが追加されて桁数を自動で調節されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#コロンは省略可 >>> "{:.5f}".format(0.08) '0.08000' >>> "{:5f}".format(0.08) '0.080000' #左右中央揃えは意味ない >>> "{:<5f}".format(0.08) '0.080000' >>> "{:>5f}".format(0.08) '0.080000' >>> "{:^5f}".format(0.08) '0.080000' |
パディング
パディングとは
パディングとは余白という意味もありますが、文字列の場合はデータの長さをそろえるために前後に挿入された文字列のことを言います。
言い換えると、空白を置き換えるための文字ことです。以下のように「*」「0」などを指定できます。もちろん他の文字も指定できます。
文字列のパディング(そろえる・0埋め)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#右揃え >>> "{:>10}".format("abcde") ' abcde' >>> "{:*>10}".format("abcde") '*****abcde' #左揃え >>> "{:<10}".format("abcde") 'abcde ' >>> "{:*<10}".format("abcde") 'abcde*****' >>> "{:^10}".format("abcde") ' abcde ' #中央揃え >>> "{:0^10}".format("abcde") '00abcde000' |
整数のパディング(0埋め)
整数や小数でパディングを使いたいときは「d」「f」を忘れずにつけておきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#右揃え >>> "{:010d}".format(123) '0000000123' >>> "{:0>10d}".format(123) '0000000123' >>> "{:*10d}".format(123) ValueError: Invalid format specifier >>> "{:*>10d}".format(123) '*******123' #左揃え >>> "{:0<10d}".format(123) '1230000000' >>> "{:*<10d}".format(123) '123*******' #中央揃え >>> "{:0^10d}".format(123) '0001230000' >>> "{:*^10d}".format(123) '***123****' |
小数のパディング(0埋め)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#右揃え >>> "{:010f}".format(0.08) '000.080000' >>> "{:0>10f}".format(0.08) '000.080000' >>> "{:*10f}".format(0.08) ValueError: Invalid format specifier >>> "{:*>10f}".format(0.08) '**0.080000' #左揃え >>> "{:0<10f}".format(0.08) '0.08000000' >>> "{:*<10f}".format(0.08) '0.080000**' #中央揃え >>> "{:0^10f}".format(0.08) '00.0800000' >>> "{:*^10f}".format(0.08) '*0.080000*' |
「0」でパディングするときはオプション「<,>,^」が無くてもエラーにはなりませんが、「*」などの数値以外でパディングするときはオプションがないとエラーになります。
まとめ
- 文字列の書式化にはformatメソッドを使う
- 波カッコ({})の部分が置換される
- インデックスを指定できる
- 書式オプションを指定できる
- コロン(:)の後ろに書く
- 左右中央揃え「<,>,^」
- 桁数指定「.」
- 整数「d」小数「f」
プログラミング言語のなかでも人気の高いPythonを学習する教材を紹介します。 最近ではプログラミングスククールがたくさんあるので迷うと思います。 ですが、まずは無料教材から始めてみましょう。苦労した分だけ力がつきます。 […]