Pythonで文字列のフォーマットを整える方法を解説します。
Contents
文字列のフォーマットを整える ~ format ~
Pythonで文字列を扱う場合に、プログラム実行時の値等を使って文字列を整形したくなる場面によく直面します。文字列のフォーマットを整えたい場合には、formatメソッドを使用します。
formatメソッドの公式ドキュメントの記載はこちらを参照してください。
以降でformatメソッドの使い方を例を用いて紹介します。
先頭から引数の値を順に埋め込む場合
formatメソッドで、先頭から引数の値を順に埋め込みたい場合には、以下のように使用します。
# 先頭から引数の値を順に埋め込む print('{}の性別は{}で、年齢は{}歳です。'.format('太郎', '男性', 20)) # 変数に値を入れて使用する場合も同様 name = '太郎' sex = '男性' age = 20 print('{}の性別は{}で、年齢は{}歳です。'.format(name, sex, age))
【実行結果】 太郎の性別は男性で、年齢は20歳です。 太郎の性別は男性で、年齢は20歳です。
値を埋め込みたい部分には{}を設定します。formatメソッドは引数に指定した値の順に{}に埋め込んでいきます。
この方法は最も基本的な使い方ですが、文字列内の値の順番を変えたい場合に引数の順番も書き換える必要があり少し不便です。順番を入れ替えることを考慮すると、次に紹介する引数番号を指定して値を埋め込む方法が便利です。
引数の番号を指定して値を埋め込む場合
formatメソッドで、引数番号を指定して値を埋め込む場合には、以下のように使用します。
# 引数の番号を指定して値を埋め込む print('{0}は{2}歳の{1}です。'.format('太郎', '男性', 20)) # 変数に値を入れて使用する場合も同様 name = '太郎' sex = '男性' age = 20 print('{0}は{2}歳の{1}です。'.format(name, sex, age))
【実行結果】 太郎は20歳の男性です。 太郎は20歳の男性です。
引数番号を指定する場合には、文字列中の{}内に引数番号を指定します。
このように指定しておくことで、一度引数に指定した値の順番を変えたい場合には、文字列内の数字の変更のみで済みます。引数の番号は0からである点に注意しましょう。
引数に名前をつけて値を埋め込む場合
formatメソッドで、引数に名前を付けて値を埋め込む場合には、以下のように使用します。
# 引数を名前付けして値を埋め込む print('{name}は{age}歳の{sex}です。'.format(name='太郎', sex='男性', age=20)) # 変数に値を入れて使用する場合も同様 name1 = '太郎' sex1 = '男性' age1 = 20 print('{name}は{age}歳の{sex}です。'.format(name=name1, sex=sex1, age=age1))
【実行結果】 太郎は20歳の男性です。 太郎は20歳の男性です。
引数に名前付けする場合には、文字列中の{}内に引数名を指定します。
formatの引数にはキーワード引数の形式で変数と値を指定します。上記の例では引数と変数の区別が分かりやすいように設定する値の変数名はname1のようにしています。
フォーマット済み文字列リテラル(f-string)で変数を指定する場合
Python3.6よりフォーマット済み文字列リテラル(f-string)が追加されています。以降はf-stringと記載することにし、使用方法をご紹介します。
フォーマット済み文字列リテラル(f-string)の公式ドキュメントの記載はこちらを参照してください。
フォーマット済み文字列リテラルの使い方
※Python 3.6で追加
f-stringは、文字列の前に接頭辞'f'または'F'が付与されている文字列です。f-stringには{}で区切られた置換フィールドに変数や式を直接指定することができます。
文章だけだとよく分かりにくいかもしれませんので、以下の使用例を見てみましょう。
# フォーマット文字列の使い方 name = '太郎' sex = '男性' age = 20 # f-stringで値を埋め込む print(f'{name}は{age}歳の{sex}です。') print(f'{name}は{age*2}歳の{sex}です。')
【実行結果】 太郎は20歳の男性です。 太郎は40歳の男性です。
上記例のように、fを文字列の前につけて文字列中の変数を埋め込みたい部分に{}を設置し、埋め込みたい変数や式を指定します。
{}内には式も設定できる、上記例のように{age*2}のようにすることが可能です。
人によりformatメソッドの方が使用しやすい等があるかもしれませんが、私はf-stringの方を好んで使用しています。
フォーマット済み文字列リテラルで変数や式を含めて表示する方法
※Python 3.8で追加
Python3.8から変数に「=」を付けることで変数を含めて表示する方法が追加されています。以下の例で見てみましょう。
# フォーマット文字列で変数や式を表示する方法 name = '太郎' sex = '男性' age = 20 # f-stringで変数や式を含めて表示する方法 print(f'{name=}は{age=}歳の{sex=}です。') print(f'{name=}は{age*2=}歳の{sex=}です。')
【実行結果】 name='太郎'はage=20歳のsex='男性'です。 name='太郎'はage*2=40歳のsex='男性'です。
この例では、結果の中に「age*2=40」のように、実際に埋め込んだ際に評価された変数と式を含めて表示がされていることが分かります。
計算結果のみだとどういった式で計算されているか分かりにくいですが、上記の方法だとどのような式を設定したかが一目でわかるため、デバッグ時などで便利な機能です。
上記で紹介しているソースコードについてはgithubにて公開しています。参考にしていただければと思います。