はじめに
Pythonでよく用いられるformatメソッドの具体的な使い方を説明します。
バージョンが上がるにつれ、便利になってきたformatメソッドを使いこなしましょう。

formatメソッドって?




実務で文字列を整形しようとすると結構使うんだよ。
まぁちょっと見てみて
formatメソッドとは
文字列の書式化操作を行います。このメソッドを呼び出す文字列は通常の文字、または、
Pythonドキュメント3.9.0{}
で区切られた置換フィールドを含みます。それぞれの置換フィールドは位置引数のインデックスナンバー、または、キーワード引数の名前を含みます。返り値は、それぞれの置換フィールドが対応する引数の文字列値で置換された文字列のコピーです。
https://docs.python.org/ja/3/library/stdtypes.html#str.format
$ python
>>> "The sum of 1 + 2 is {0}".format(1+2)
'The sum of 1 + 2 is 3'




ほーん・・・
で?




そうなるよね。
上記がドキュメントの記述ですがわかりやすく言うと、
formatメソッドは文字列を上手く整形できるメソッド
です。
formatメソッドの使いどころって?
文字列への埋め込みに使われます。
printメソッドで変数を任意の文字列とともに出力したいときにもよく使います。
datetimeを用いて時刻を文字列化したい場合などにも使用することがあります。
formatメソッドの構文一覧
'任意の文字列{}'.format(引数...)
任意の文字列に{}を付け加えておくと、formatメソッドの引数に渡された値をそのまま代入して返してくれます。
具体例
>>> sample_str = "I am {}. Hi Samesan"
>>> sample_str.format("kuma")
'I am kuma. Hi Samesan'
変数を入れる場合
このように文字列を入れてもくれますし、変数を入れても使えます。
具体例
>>> apple = 50
>>> orange = 100
>>> sum = apple + orange
>>> print('合計:{}円'.format(sum))
合計:100円
より具体的な使い方
ドキュメント書いてあったformatメソッドの使い方を各種紹介します。
位置引数を使ったアクセス
formatメソッドの引数はインデックス番号がデフォルトで指定されており、{}の中にインデックス番号をすることで順番を変更できます!
また、文字列, などで区分けしていなくても文字列に割り振られているインデックス番号を参照してくれます。
同じ文字列を使いまわすことも可能です!
具体例
# 3.1以降のみ
>>> '{}, {}, {}'.format('a', 'b', 'c')
'a, b, c'
# インデックス番号を指定
>>> '{0}, {1}, {2}'.format('a', 'b', 'c')
'a, b, c'
# インデックス番号を入れ替えてみる
>>> '{2}, {1}, {0}'.format('a', 'b', 'c')
'c, b, a'
# 引数の文字列をパッキングしていなくても入れ替えてくれる
>>> '{2}, {1}, {0}'.format(*'abc')
'c, b, a'
# 同じ文字列を使いまわすことも可能
>>> '{0}{1}{0}'.format('abra', 'cad')
'abracadabra'
名前を使ったアクセス
デフォルトではインデックス番号がformatメソッドの引数に割り振られますが、辞書型として名前を振ることも可能です。
具体例
# 辞書型
>>> apple = 50
>>> orange = 100
>>> total = apple + orange
>>> print('りんご:{apple_price}円 みかん:{orange_price}円 合計:{total_price}円'.format(apple_price: apple, orange_price: orange, total_price: total))
りんご:50円 みかん:100円 合計:150円
# 辞書型を定義して代入
>>> dict = {apple_price: 50, orange_price: 100, total_price: 150}
>>> print('りんご:{apple_price}円 みかん:{orange_price}円 合計:{total_price}円'.format(dict))
りんご:50円 みかん:100円 合計:150円
引数の要素にアクセス
リストやタプルも埋め込むことができます。{}の中にリストやタプルの要素のインデックス番号を書くことで、リストやタプルの要素を埋め込みます。
list = [引数1, 引数2, ...]
taple = (引数1, 引数2, ...)
"sample1: {0[指定したいリストのインデックス番号]}; sample2: {0[指定したいリストのインデックス番号]}".format(list)
"sample1: {0[指定したいタプルのインデックス番号]}; sample2: {0[指定したいタプルのインデックス番号]}".format(taple)
具体例
>>> coord = (3, 5)
>>> 'X: {0[0]}; Y: {0[1]}'.format(coord)
'X: 3; Y: 5'
テキストの幅を指定した整列
文字列の数を決めておき、文字列をどう左詰にしたり中央揃えにしたりすることができます。
# 左詰
'{:<数字}'.format(任意の文字列)
# 右詰
'{:>数字}'.format(任意の文字列)
# 中央揃え
'{:^数字}'.format(任意の文字列)
# 空白を*にする
'{:*^数字}'.format(任意の文字列)
具体例
# 左詰
>>> '{:<30}'.format('left aligned')
'left aligned '
# 右詰
>>> '{:>30}'.format('right aligned')
' right aligned'
# 中央揃え
>>> '{:^30}'.format('centered')
' centered '
# 空白を*にする
>>> '{:*^30}'.format('centered')
'***********centered***********'
千の位のセパレータにカンマを使用する
金額などを出力したい場合などで千の位ごとにカンマをつけたい時があると思いますが、そういった場合の記述も簡単です。
'{:,}'.format(数字)
具体例
# 1000ずつ,をつけたい場合
>>>'{:,}'.format(1234567890)
'1,234,567,890'
パーセントを表示する
パーセントの出力をしたくて桁数指定も簡単です。
'{:.桁数の数字}'.format(指定の数字)
具体例
>>> points = 19
>>> total = 22
>>> 'Correct answers: {:.2%}'.format(points/total)
'Correct answers: 86.36%'
日付を扱いたい、datetimeモジュールを文字列に変換したい
日付を扱う場合はdatetimeモジュールをimportすることが多いと思います。
その場合の文字列の変換に苦労することが多々あるのではないかと思います。
基本的にはstrftimeメソッドを使うかと思うのですが、formatメソッドを使う方法もあります。
>>> import datetime
# 年を4桁表示
'{:%Y-%m-%d %H:%M:%S}'.format(datetimeで取得した日付)
# 年を下2桁のみで表示
'{:%y-%m-%d %H:%M:%S}'.format(datetimeで取得した日付)




これ知らんかった〜〜〜!




だよね笑
僕も知らなかったよ・・・
きちんとドキュメント読むことが大事だね。
具体例
>>> import datetime
>>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)
# 年を4桁表示
>>> '{:%Y-%m-%d %H:%M:%S}'.format(d)
'2010-07-04 12:15:58'
# 年を下2桁のみで表示
>>> '{:%y-%m-%d %H:%M:%S}'.format(d)
'10-07-04 12:15:58'
終わりに
- 文字列を整形する時に使う
- 辞書型やリスト型、タプル型での指定もできる。
- 日付の整形にも使えるよ!!




Pythonの学習に関しては様々本屋には書籍が並んでいますが、下記がおすすめです。
EXCELなども使ったことのない初学者の方
EXCELなどでちょっとPCの操作に慣れている方
他のプログラミング言語を少し触ったことがある方