ホーム > python > tips > Pythonでformatメソッドを用いた書式の指定

Pythonでformatメソッドを用いた書式の指定

pythontips

str.format()メソッド

文字列strにはstr.format(*args, **kwargs)メソッドが用意されており、文字列の書式を指定することが可能です。

環境

今回動作の確認を行った際のバージョンは下記の通り
python:3.10.9


基本的な使い方

文字列内に置換フィールド{}を組み込み、format()を使用することでformat()の引数で指定した値に置き換えることが可能です。
置換フィールド{}と引数の数が一致していれば複数利用も可能です。

if __name__ == '__main__':
print('{}回目のテストです'.format(10))
# 10回目のテストです
print('{}回目の{}です'.format(10, 'テスト'))
# 10回目のテストです

引数の数が足りていない場合は、下記の様にエラーが発生します。
また、引数が多い場合は無視されます。

if __name__ == '__main__':
print('{}回目の{}です'.format(10, 'テスト', 100))
# 10回目のテストです
print('{}回目の{}です'.format(10))
# IndexError: Replacement index 1 out of range for positional args tuple


使用する引数の指定

整数を使って指定

置換フィールド{}内に整数値を指定することで使用する引数を指定することが出来ます。同じ引数を複数回使用することも可能です。

if __name__ == '__main__':
print('{0}回目の{1}です。{2}回目の{1}でNGがありました'.format(10, 'テスト', 5))
# 10回目のテストです。5回目のテストでNGがありました

名前を使って指定

置換フィールド{}とformat()の引数に名前を指定することで使用する引数を指定することが出来ます。整数の時同様、同じ引数を複数回使用することも可能です。

if __name__ == '__main__':
print('{num1}回目の{st}です。{ng}回目の{st}でNGがありました'.format(num1=10, st='テスト', ng=5))
# 10回目のテストです。5回目のテストでNGがありました

書式の指定

「:」を用いて書式指定をすることが可能です。
上記に記載の通り名前を使って使用する引数の指定も可能です。

0埋め

if __name__ == '__main__':
for i in range(3):
print('{:08}回目です'.format(i))
# 00000000回目です
# 00000001回目です
# 00000002回目です
# 名前を使って指定
for i in range(3):
print('{num:08}回目です'.format(num=i))
# 00000000回目です
# 00000001回目です
# 00000002回目です

桁区切り

if __name__ == '__main__':
for i in range(3):
print('{:,}回目です'.format(i+1000))
# 1,000回目です
# 1,001回目です
# 1,002回目です
# 名前を使って指定
for i in range(3):
print('{num:,}回目です'.format(num=i + 1000))
# 1,000回目です
# 1,001回目です
# 1,002回目です

小数点以下の桁数指定

if __name__ == '__main__':
for i in range(1,3):
print('{:.3f}回目です'.format(i/100))
# 0.010回目です
# 0.020回目です
# 名前を使って指定
for i in range(1, 3):
print('{num:.3f}回目です'.format(num=i / 100))
# 0.010回目です
# 0.020回目です

幅指定(自動、左寄せ、中央寄せ、右寄せ)

if __name__ == '__main__':
x = 10
y = 20
# 自動設定
print('{x:5}と{y:10}の和は{sum}です'.format(x=x, y=y, sum=x+y))
# 10と 20の和は30です
# 左寄せ
print('{x:<5}と{y:<10}の和は{sum}です'.format(x=x, y=y, sum=x+y))
# 10 と20 の和は30です
# 中央寄せ
print('{x:^5}と{y:^10}の和は{sum}です'.format(x=x, y=y, sum=x+y))
# 10 と 20 の和は30です
# 右寄せ
print('{x:>5}と{y:>10}の和は{sum}です'.format(x=x, y=y, sum=x+y))
# 10と 20の和は30です