Python

Pythonの書式設定(formatの使い方)について解説

By 2021年10月24日No Comments

formatメソッドを使って、文字の書式設定(0埋め、文字寄せなど)を行う方法を解説していきます。

formatメソッドで文字列を埋め込む

formatメソッドを使うと、文字列中に別の文字列を埋め込むことができます。

文字列中に、波括弧{}で囲まれた「置換フィールド」を挿入することで、別の文字列を埋め込みます。

“置換フィールドつき文字列”.format(埋め込む変数1, 埋め込む変数2, …)

s = "数学{}点,国語{}点,{}です。".format(70, 50, "合格")
print(s)

(出力結果)

数学70点,国語50点,合格です。

置換フィールド(波括弧)を挿入すると、formatメソッドの引数に渡された変数が、文字列中の置換フィールドの前から順番に埋め込まれます。

置換フィールド内でインデックス番号を指定することで、引数の埋め込む位置を替えることもできます。

s = "数学{2}点,国語{1}点,{0}です。".format("合格", 50, 70)
print(s)

(出力結果)

数学70点,国語50点,合格です。

「数学」の文字列の後には、2番目の引数である「70」、「国語」の文字列の後には、1番目の引数である「50」、最後に0番目の引数である「合格」が埋め込まれています。

埋め込む文字の書式を指定する

埋め込む文字列を整形したい場合、置換フィールド内で書式指定をします。

置換フィールド内では、以下の形式でコードを書きます。

{インデックス番号など:書式指定}

インデックス番号や書式指定が不要の場合、どちらも省略することができます。

設定できる書式は以下のような種類があります。

・型(整数、浮動小数点数など)

・精度(小数点以下の桁数)

・幅(表示する最小の文字数)

・文字の配置(左寄せ、中央配置、右寄せ)

・パディング(空白を別の文字で埋める)

上記の書式は複数の書式を指定できます。

複数の書式を指定する場合は以下のように指定します。

{インデックス番号など:[パディング][文字の配置][型][幅][.精度]}

その他書式などは、pythonドキュメントを参照してください。

型の指定に関する書式

埋め込む変数が数値の場合、どの型で表示するか(整数型、浮動小数点型など)の書式指定をすることができます。

具体的には、置換フィールドを以下のように書くことで、書式指定に対応した数値型に整形されます。

・{:d} : 整数

・{:f} : 浮動小数点数

・{:e} : 浮動小数点数(指数表記)

・{:b} : 2進数

・{:x} : 16進数

num = 300

s = "数字は{}です".format(num)
print(s, "(書式指定なし)")

s = "数字は{:d}です".format(num)
print(s, "(整数)")

s = "数字は{:f}です".format(num)
print(s, "(浮動小数点数)")

s = "数字は{:e}です".format(num)
print(s, "(指数表記)")

s = "数字は{:b}です".format(num)
print(s, "(2進数)")

s = "数字は{:x}です".format(num)
print(s, "(16進数)")

(出力結果)

数字は300です (書式指定なし)
数字は300です (整数)
数字は300.000000です (浮動小数点数)
数字は3.000000e+02です (指数表記)
数字は100101100です (2進数)
数字は12cです (16進数)

なお、指数表記の「e+02」という表示は、10の2乗を表しています。

精度に関する書式

埋め込む変数が浮動小数点数の場合、小数点以下の精度(小数点以下の最大表示桁数)を指定することができます。

置換フィールドは下記のように書きます。

{インデックス番号など:.精度}

小数点3桁の精度で表示したい場合、置換フィールドは{:.3}となります。

数値の型と合わせて、{:.3f}や{:.3e}のように書くのが一般的です。

num = 3.14159265

# 3桁精度
s = "円周率は{:.3f}です".format(num)
print(s)

# 5桁精度、指数表記
s = "円周率は{:.5e}です".format(num)
print(s)

(出力結果)

円周率は3.142です
円周率は3.14159e+00です

なお、指定した精度の次の桁は、四捨五入されます。

また、元の数値よりも多い桁の精度を指定した場合、小数点以下が0で埋められます。

num = 3.14159265

# 10桁精度
s = "円周率は{:.10f}です".format(num)
print(s)

(出力結果)

円周率は3.1415926500です

浮動小数点数だけでなく、文字列も埋め込むことができます。

文字列を埋め込む場合、最大何文字まで表示するかを指定するができます。

s = "Python"

# 最大2文字
format_s = "私は{:.2}マスターです".format(s)
print(format_s)

# 最大4文字
format_s = "私は{:.4}マスターです".format(s)
print(format_s)

# 最大10文字
format_s = "私は{:.10}マスターです".format(s)
print(format_s)

(出力結果)

私はPyマスターです
私はPythマスターです
私はPythonマスターです

“Python”の文字列自体は6文字であるため、最大10文字の場合でも6文字分までしか表示されません。

幅に関する書式

埋め込む変数が文字列の場合、表示幅(最低でも表示したい文字数)について書式指定することができます。

置換フィールドは下記のように書きます。

{インデックス番号など:幅}

s = "Python"

# 幅8文字
format_s = "私は{:8}マスターです".format(s)
print(format_s)

# 幅10文字
format_s = "私は{:10}マスターです".format(s)
print(format_s)

(出力結果)

私はPython  マスターです
私はPython    マスターです

埋め込む文字列の文字数が幅指定の文字数よりも小さい場合、文字列がスペースで埋められます。”Python”の文字列自体は6文字であるため、幅指定が8文字なら2文字分のスペースで埋められます。

上記の例ではスペースが右側に埋められていますが、埋め込むスペースの位置を制御したい場合は、後ほど説明する「文字の配置」に関する書式を指定します。

埋め込む文字列の文字数が幅指定の文字数よりも大きい場合は以下のようになります。

s = "Python"

# 幅3文字
format_s = "私は{:3}マスターです".format(s)
print(format_s)

(出力結果)

私はPythonマスターです

幅の書式指定は、「最低でも表示する文字数」です。上記コードの例では、”Python”の文字列自体は6文字であり、最小幅3文字という条件を満たしているため、”Python”の文字列をそのまま埋め込みます。

埋め込む変数が整数の場合も同様、表示幅について書式指定が可能です。最低桁数が足りない場合はスペースで埋められます。

num = 12345

# 幅3桁
s = "数字は{:3d}です".format(num)
print(s)

# 幅7桁
s = "数字は{:7d}です".format(num)
print(s)

(出力結果)

数字は12345です
数字は  12345です

浮動小数点数の場合も同様、表示幅について書式指定が可能です。最低文字数が足りない場合はスペースで埋められます。ただし、「.」も含めた全ての文字数の幅であることに注意してください。

num = 123.123

# 小数点精度5桁、幅7文字
s = "数字は{:7.5f}です".format(num)
print(s)

# 小数点精度5桁、幅10文字
s = "数字は{:10.5f}です".format(num)
print(s)

(出力結果)

数字は123.12300です
数字は 123.12300です

文字の配置に関する書式

表示幅に関して書式指定をした際に、文字数が足りない場合はスペースなどの記号で埋められますが、文字列を左右、中央のどの位置に配置するかを書式指定することが可能です。

表示幅の指定と合わせて、以下のように書式指定します。

・{:<幅} : 左寄せ

・{:^幅} : 中央配置

・{:>幅} : 右寄せ

s = "AAA"

# 幅5文字、左寄せ
format_s = "xx{:<5}xx".format(s)
print(format_s, "(左寄せ)")

# 幅5文字、右寄せ
format_s = "xx{:>5}xx".format(s)
print(format_s, "(右寄せ)")

# 幅5文字、中央配置
format_s = "xx{:^5}xx".format(s)
print(format_s, "(中央配置1)")

# 幅6文字、中央配置
format_s = "xx{:^6}xx".format(s)
print(format_s, "(中央配置2)")

(出力結果)

xxAAA  xx (左寄せ)
xx  AAAxx (右寄せ)
xx AAA xx (中央配置1)
xx AAA  xx (中央配置2)

中央に配置する場合、左右均等にスペースが埋められない場合は1文字左側にずれます。

パディングに関する書式

文字列の左右の余白を、スペースではなく別の文字で埋めることも可能です。

表示幅の書式や、文字の配置に関する書式と合わせて、以下のように書式指定します。

{インデックス番号など:[パディングする文字][文字の配置][幅]}

s = "Python"

# 幅8文字、左寄せ、余白を「*」で埋める
format_s = "{:*<8}".format(s)
print(format_s)

# 幅8文字、中央配置、余白を「*」で埋める
format_s = "{:*^8}".format(s)
print(format_s)

# 幅8文字、右寄せ、余白を「*」で埋める
format_s = "{:*>8}".format(s)
print(format_s)

(出力結果)

Python**
*Python*
**Python

整数の書式指定をする際、「123」の左側を「000123」のように0で埋める、「ゼロパディング」がよく用いられます。

s = 123

# 整数型、幅6文字、右寄せ、余白を「0」で埋める
format_s = "{:0>6d}".format(s)
print(format_s)

# 整数はデフォルトで右寄せされるので、文字の配置の指定は実は不要。
format_s = "{:06d}".format(s)
print(format_s)

(出力結果)

000123
000123

f文字列について

Python3.6以降では、formatメソッドをより簡易的に書けるようにした、「f文字列」を使用できます。

f文字列は、以下のように文字を埋め込みます。

f”{変数名:書式指定}”

実際にコードを書くと以下のようになります。

s = "円周率"
pi = 3.14

# formatメソッドでの書き方
format_str = "{}は{}です。".format(s, pi)
print(format_str)

# f文字列での書き方
format_str = f"{s}は{pi}です。"
print(format_str)

(出力結果)

円周率は3.14です。
円周率は3.14です。

formatメソッドでは、引数として埋め込む変数を渡していましたが、f文字列では置換フィールド内で直接埋め込む変数を書くことができ、直感的に分かりやすい記法です。

formatメソッドと同じく、書式指定もできます。

s = "円周率" # 幅5文字、中央配置、余白を「*」で埋める
pi = 3.14   # 小数点以下精度5桁で表示


# formatメソッドでの書き方
format_str = "{:*^5}は{:.5f}です。".format(s, pi)
print(format_str)

# f文字列での書き方
format_str = f"{s:*^5}は{pi:.5f}です。"
print(format_str)

(出力結果)

*円周率*は3.14000です。
*円周率*は3.14000です。

まとめ

・formatメソッドを使うと、文字列中に別の文字列を埋め込むことができる。別の文字列を埋め込む際は、元の文字列中に波括弧{}で囲まれた「置換フィールド」を挿入する。

・置換フィールド内で、書式の指定をすることができる。指定方法は例として、{インデックス番号など:[パディング][文字の配置][型][幅][.精度]} のように指定する。

・Python3.6以降では、formatメソッドを簡易的に使えるようにした、「f文字列」を使用することができる。

Udemyの動画学習でもPythonを勉強しよう!

「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「本ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです!

UdemyのPythonおすすめ33講座レビューリスト
HOSL

Author HOSL

More posts by HOSL