hsmwhsmw

初心者入門フォーマット済み文字列リテラル(f文字列)を使った文字列の書式設定 | Python入門

eyecatch

文字列の書式化を行うときに、 format メソッドによる方法をより簡潔に行える方法として Python 3.6 からフォーマット済み文字列リテラル(f文字列)が利用できるようになりました。書式の設定方法は format メソッドと同じですが、置換フィールドの中に直接値を記述することでより簡潔に分かりやすく記述することができます。ここではフォーマット済み文字列リテラル(f文字列)を使って文字列の書式設定を行う方法について解説します。

目次

  1. フォーマット済み文字列リテラルの記述方法
  2. 書式指定子の指定方法

フォーマット済み文字列リテラルの記述方法

文字列型の format メソッドを使って書式設定を行う場合は、次のような書式になっていました。

"xxxx {インデックス:書式指定子} xxxx".format(値)

文字列の中に書式の設定方法を記述した置換フィールド(上記で {インデックス:書式指定子} の部分です)を記述し、変換する値は format メソッドの引数で指定しています。そして置換フィールドと値を対応させるために、置換フィールドにはインデックスやキーワードを指定していました。

f文字列と呼ばれるフォーマット済み文字列を使用した場合、書式指定子の記述方法は format メソッドの場合と同じですが、変換する値を置換フィールドの中に直接記述することができます。

f"xxxx {値:書式指定子} xxxx"

フォーマット済み文字列は先頭に "f" または "F" を記述した文字列で、文字列の中に { と } で囲まれた置換フィールドを記述します。 format メソッドと異なり、置換フィールドの中に直接書式を設定する値や式を記述します。

具体的には format メソッドでは次のように記述をしていました。

>>> name = "Suzuki"
>>> old = 18
>>> print("名前は{:<8s}です。年齢は{:>3d}歳です。".format(name, old))
名前はSuzuki  です。年齢は 18歳です。
>>>

フォーマット済み文字列を使用すると次のように記述することができます。

>>> name = "Suzuki"
>>> old = 18
>>> print(f"名前は{name:<8s}です。年齢は{old:>3d}歳です。")
名前はSuzuki  です。年齢は 18歳です。
>>>

format メソッドを使った場合よりも簡潔に記述することができ、またどの値がどの書式設定で使用されるのかが分かりやすくなっています。

なおフォーマット済文字列の中で { や } を文字として記述したい場合には {{ や }} と記述してください。

>>> name = "Suzuki"
>>> print(f"名前は{{ {name:<8s} }}です。")
名前は{ Suzuki   }です。
>>>

書式指定子の指定方法

書式指定子の記述方法は format メソッドを使った場合と同じです。詳しくは「formatメソッドを使った文字列の書式設定」を参照されてください。下記にいくつか書式設定を行った例を記述します。

指数表記、固定小数点表記、パーセンテージ表記:

>>> num = 0.0752
>>> print(f"指数表記={num:e}")
指数表記=7.520000e-02
>>> print(f"固定小数点表記={num:f}")
固定小数点表記=0.075200
>>> print(f"パーセンテージで表示={num:%}")
パーセンテージで表示=7.520000%
>>>

最小フィールド幅の指定と配置方法:

>>> str1 = "Lemon"
>>> print(f"文字列=[{str1:<10s}]")
文字列=[Lemon     ]
>>> print(f"文字列=[{str1:^10s}]")
文字列=[  Lemon   ]
>>> print(f"文字列=[{str1:>10s}]")
文字列=[     Lemon]
>>>

数値の区切り文字:

>>> num = 1234567
>>> print(f"数値={num:,d}")
数値=1,234,567
>>>

利用可能な書式指定子の中でいくつかのオプションについて試してみました。

-- --

フォーマット済み文字列リテラル(f文字列)を使って文字列の書式設定を行う方法について解説しました。