文字列中に変数を埋め込みたいときは、文字列オブジェクトメソッドのformatが便利です。
例えば、固定幅の連番ファイル名を作成するときなどに使えます。下記の例では「001.txt」から「010.txt」まで出力されます。
for i in range(1, 11):
fname = '{:03d}.txt'.format(i)
print(fname)
基本的な使い方は、文字列中の変数を埋め込みたい場所に大カッコを入力して、formatに埋め込みたい変数リストや辞書を渡します。formatに渡した変数は、特に指定しなければstr()で解釈して文字列に埋め込まれるので、数値をそのまま入力できます。
出力形式を指定する場合は、大カッコ内でフィールド名などの後ろに「:」をつけて色々と指定します。出力の幅や左右中央寄せ、基数や桁区切りなど細かく指定できます。
Pythonドキュメント 6.1.3. 書式指定文字列の文法は詳しすぎる面があるので、自分がよく使う指定方法を表にまとめました。
埋め込み方法 | 使用例 | 出力 |
---|---|---|
単純な使用例 | '{0}, {1}, {2}'.format('a', 'b', 'c') | 'a, b, c' |
簡略的 | '{}, {}, {}'.format('a', 'b', 'c') | 'a, b, c' |
順番入れ替え | '{2}, {1}, {0}'.format('a', 'b', 'c') | 'c, b, a' |
変数名で指定 | '({x}, {y}, {x})'.format(x=99, y=10) | '(99, 10, 99)' |
右寄せ(指定数字が全体の文字数) | '{:>6}'.format('右寄せ') | ' 右寄せ' |
左寄せ(指定文字で空白を埋める) | '{:-<6}'.format('左寄せ') | '左寄せ---' |
中央寄せ(空白をAで埋める) | '{:A^5}'.format(5) | 'AA5AA' |
正負の記号付きで小数 | '{:+f}'.format(7) | '+7.000000' |
小数点以下第3位まで(四捨五入) | '{:.3f}'.format(7.85963) | '7.860' |
基数(2, 8進数)の指定 | '{0:#b}, {0:#o}'.format(10) | '0b1010, 0o12' |
基数(10, 16進数)の指定 | '{0:d}, {0:#x}'.format(10) | '10, 0xa' |
3桁ごとに区切りを入れる | '{:,}'.format(1000000) | '1,000,000' |