本記事では、Pythonで文字列をフォーマットする方法を解説します。フォーマットする方法はフォーマット済み文字列リテラル(f-string)とformatメソッドの2種類あり、これらについて説明します。
フォーマット済み文字列リテラル(f-string)の方法
フォーマット済み文字列リテラル(f-string)はPython 3.6から導入された文字列フォーマット方法です。文字列の先頭に「f」または「F」を付けることで、文字列内に波括弧「{}」で囲まれた部分に変数や式を埋め込むことができます。簡潔で読みやすいコードを書くことができるため、現在最も推奨されている方法です。
構文
文字列の先頭に「f」を付け、変数や式を波括弧で囲むことで、その部分が変数の値や式の評価結果に置き換えられます。
f"文字列{変数や式}"
基本的な例
文字列内の{name}と{age}の部分が、それぞれの変数の値に置き換えられています。波括弧内には直接変数名を記述するだけで使用できるため、非常に直感的です。
name = "田中"
age = 30
print(f"私の名前は{name}です。年齢は{age}歳です。")
# 出力: 私の名前は田中です。年齢は30歳です。
複数の変数を使用する例
複数の変数を同時に利用する場合も、それぞれの変数を波括弧で囲むだけで簡単に記述できます。日本語のように姓名を並べる場合も、変数の順序を自由に入れ替えることができます。また、数値型の変数も自動的に文字列に変換されるため、型を意識する必要がありません。
first_name = "太郎"
last_name = "山田"
age = 25
print(f"{last_name}{first_name}は{age}歳です。")
# 出力: 山田太郎は25歳です。
height = 175.5
weight = 68.2
print(f"身長は{height}cm、体重は{weight}kgです。")
# 出力: 身長は175.5cm、体重は68.2kgです。
応用的な例
波括弧内で変数名の後にコロン(:)を付け、続けて書式指定子を記述することで、表示形式をカスタマイズできます。この例では、小数点以下2桁まで表示する.2fという指定子を使用しています。
# 書式指定
pi = 3.141592653589793
print(f"円周率は{pi:.2f}です。") # 小数点以下2桁
# 出力: 円周率は3.14です。
数値の表示幅を指定し、足りない桁を0で埋めることができます。03dは、整数を3桁で表示し、足りない部分を0で埋めることを意味します。
# 整数の桁揃え
num = 42
print(f"数値: {num:03d}") # 3桁で0埋め
# 出力: 数値: 042
f-stringの波括弧内では、直接計算式を記述することができます。この例では変数aとbの値を表示するだけでなく、その和a + bも同時に計算して表示しています。これによりコードがより簡潔になります。
# 計算式の埋め込み
a = 10
b = 20
print(f"{a} + {b} = {a + b}")
# 出力: 10 + 20 = 30
Python 3.8以降ではf-stringにはデバッグに便利な特殊な構文があります。変数名の後に=
を追加すると、変数名とその値の両方が表示されます。これによりデバッグ作業が非常に効率的になります。
# デバッグ構文
name = "太郎"
age = 25
height = 175.5
# 変数名と値を同時に表示
print(f"{name=}")
# 出力: name='太郎'
print(f"{age=}")
# 出力: age=25
# 書式指定子と組み合わせることも可能
print(f"{height=:.1f}")
# 出力: height=175.5
複数の変数を一度にデバッグ表示したい場合は、カンマで区切って記述することもできます。
# 複数変数のデバッグ
x = 10
y = 20
result = x * y
print(f"{x=}, {y=}, {result=}")
# 出力: x=10, y=20, result=200
f-stringの様々な例
日付のフォーマット
日付オブジェクトに対して、コロンの後に%Y(年)%m(月)%d(日)などの書式を指定することで日付を任意の形式でフォーマットできます。
from datetime import datetime
now = datetime.now()
print(f"現在の日時: {now:%Y年%m月%d日 %H時%M分%S秒}")
# 出力例: 現在の日時: 2025年03月07日 14時30分15秒
辞書の値を使用
波括弧内に辞書名と角括弧で囲んだキーを指定することで、辞書の値を埋め込むことができます。
person = {"name": "佐藤", "age": 28}
print(f"{person['name']}さんは{person['age']}歳です。")
# 出力: 佐藤さんは28歳です。
右寄せ・左寄せ・中央揃え
コロンに続いて<(左寄せ)、>(右寄せ)、^(中央揃え)と数字を組み合わせることで、指定した幅で文字列を整列できます。
print(f"{'左寄せ':<10}|{'中央':^10}|{'右寄せ':>10}")
# 出力: 左寄せ | 中央 | 右寄せ
進数変換表示
数値に対してコロンの後にb(2進数)、x(16進数)、o(8進数)を指定することで、異なる進数で表示できます。
num = 255
print(f"10進数: {num}, 2進数: {num:b}, 16進数: {num:x}")
# 出力: 10進数: 255, 2進数: 11111111, 16進数: ff
パーセント表示
数値にコロンと小数点以下の桁数、そして%を指定することで、割合をパーセント表示できます。
ratio = 0.75
print(f"完了率: {ratio:.1%}")
# 出力: 完了率: 75.0%
桁区切り(カンマ)
数値にコロンとカンマを指定することで、3桁ごとにカンマを挿入できます。
large_num = 1000000
print(f"数値: {large_num:,}")
# 出力: 数値: 1,000,000
指数表記
数値にコロンとeを指定することで、科学的表記法(指数表記)で表示できます。
sci_num = 0.000000123
print(f"指数表記: {sci_num:e}")
# 出力: 指数表記: 1.230000e-07
条件式
波括弧内に三項演算子(条件式)を記述することで、条件に応じた値を表示できます。
x = 10
print(f"xは{'偶数' if x % 2 == 0 else '奇数'}です。")
# 出力: xは偶数です。
メソッド呼び出し
波括弧内で変数のメソッドを呼び出して、その結果を埋め込むことができます。
text = "hello, world"
print(f"大文字: {text.upper()}")
# 出力: 大文字: HELLO, WORLD
複雑な式
波括弧内に複雑な式や関数呼び出しを記述して、その評価結果を埋め込むことができます。
numbers = [1, 2, 3, 4, 5]
print(f"合計: {sum(numbers)}, 平均: {sum(numbers)/len(numbers)}")
# 出力: 合計: 15, 平均: 3.0
注意点
- Python 3.6以上でのみ使用可能です。
- f-string内の波括弧内では改行ができません。
- 波括弧自体を表示したい場合は、二重の波括弧「{{」「}}」を使用します。
- 文字列内でクォーテーションを使う場合、外側と異なるクォーテーションを使うか、エスケープする必要があります。
formatメソッドの方法
説明文
文字列のformatメソッドは、Python 2.6から導入された文字列フォーマット方法です。文字列内の波括弧「{}」をプレースホルダーとして使用し、formatメソッドの引数で置き換えます。f-stringが導入される前は主流の方法でした。位置引数、キーワード引数、インデックスなど様々な指定方法があり柔軟性があります。
構文
文字列内の波括弧をプレースホルダーとして使用し、formatメソッドの引数で置き換えます。波括弧内に何も指定しない場合は引数の順序通りに、数字を指定した場合はインデックス順に、名前を指定した場合はキーワード引数と対応させて置き換えられます。
"文字列{}".format(変数)
"文字列{0}{1}".format(変数1, 変数2)
"文字列{name}".format(name=変数)
基本的な例
波括弧「{}」内に何も指定しない場合、formatメソッドの引数が順番に代入されます。この例では最初の波括弧に「name」が、2番目の波括弧に「age」が代入されています。このスタイルはシンプルですが、引数の順序に注意が必要です。
name = "鈴木"
age = 35
print("私の名前は{}です。年齢は{}歳です。".format(name, age))
# 出力: 私の名前は鈴木です。年齢は35歳です。
複数の変数を使用する例
インデックスによる指定では、波括弧内に数字を入れることで、引数の位置を指定できます。0から始まるインデックスで、この例では{1}が2番目の引数「last_name」を、{0}が1番目の引数「first_name」を参照しています。 キーワード引数による指定では、波括弧内に名前を入れ、formatメソッドにキーワード引数として値を渡します。この方法は引数の順序を気にする必要がなく、コードの可読性が向上します。
# インデックスによる指定
first_name = "花子"
last_name = "佐藤"
print("{1}{0}".format(first_name, last_name))
# 出力: 佐藤花子
# キーワード引数による指定
print("身長は{height}cm、体重は{weight}kgです。".format(height=162.5, weight=52.0))
# 出力: 身長は162.5cm、体重は52.0kgです。
応用的な例
コロン(:)の後に書式指定子を追加することで、表示形式をカスタマイズできます。この例では浮動小数点数を小数点以下4桁まで表示する.4fという指定子を使用しています。formatメソッドはf-stringと同様の書式指定子をサポートしています。
# 書式指定
pi = 3.141592653589793
print("円周率は{:.4f}です。".format(pi)) # 小数点以下4桁
# 出力: 円周率は3.1416です。
こちらも書式指定子を使用して、表示幅と埋め文字を指定しています。05dは5桁の整数として表示し、足りない部分を0で埋めることを意味します。
# 幅指定と0埋め
num = 42
print("数値: {:05d}".format(num)) # 5桁で0埋め
# 出力: 数値: 00042
formatメソッドでは、同じ値を複数回使用する場合に便利なインデックスの再利用が可能です。この例では{0}と{1}を複数回使用していますが、formatメソッドの引数は一度だけ指定すれば良いため、コードの重複を避けることができます。
# インデックスの再利用
print("{0}は{1}です。{0}は素晴らしい{1}です。".format("Python", "言語"))
# 出力: Pythonは言語です。Pythonは素晴らしい言語です。
formatメソッドの様々な例
リストの要素を使用
波括弧内に引数のインデックスと要素のインデックスを指定することで、リストの特定要素を参照できます。
fruits = ["りんご", "バナナ", "オレンジ"]
print("果物: {0[0]}, {0[1]}, {0[2]}".format(fruits))
# 出力: 果物: りんご, バナナ, オレンジ
辞書の値を使用
キーワード引数として辞書を渡し、波括弧内に変数名とキーを指定することで辞書の値を参照できます。
person = {"name": "加藤", "job": "エンジニア"}
print("{p[name]}さんは{p[job]}です。".format(p=person))
# 出力: 加藤さんはエンジニアです。
日付のフォーマット
日付オブジェクトに対して、コロンの後に%Y(年)%m(月)%d(日)などのフォーマット指定子を使用できます。
from datetime import datetime
now = datetime.now()
print("現在の日時: {:%Y/%m/%d %H:%M:%S}".format(now))
# 出力例: 現在の日時: 2025/03/07 14:30:15
桁区切り(カンマ)
数値に対してコロンとカンマを指定することで、3桁ごとにカンマを挿入できます。
print("金額: {:,}円".format(1234567))
# 出力: 金額: 1,234,567円
指数表記
数値に対してコロンと小数点以下の桁数、そしてeを指定することで、指数表記で表示できます。
print("指数表記: {:.2e}".format(0.00000123))
# 出力: 指数表記: 1.23e-06
符号付き表示
数値に対してコロンと+記号を指定することで、正の値にも符号を表示できます。
print("符号付き: {:+d}".format(42))
# 出力: 符号付き: +42
中央揃え
文字列に対してコロンとキャレット(^)と幅を指定することで、指定した幅で中央揃えにできます。
print("タイトル: {:^20}".format("Python"))
# 出力: タイトル: Python
基数表記
同じ数値を異なる進数で表示する場合、インデックスを再利用し、それぞれにd(10進数)、b(2進数)、o(8進数)、x(16進数)を指定できます。
print("10進数: {0:d}, 2進数: {0:b}, 8進数: {0:o}, 16進数: {0:x}".format(42))
# 出力: 10進数: 42, 2進数: 101010, 8進数: 52, 16進数: 2a
フィールド幅と精度
小数に対してコロンと小数点以下の桁数、そしてfを指定することで、浮動小数点数を指定した精度で表示できます。
print("浮動小数点: {:.2f}".format(3.14159))
# 出力: 浮動小数点: 3.14
オブジェクトの属性
波括弧内に引数のインデックスとドット、そして属性名を指定することで、オブジェクトの属性を参照できます。
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
p = Point(3, 4)
print("座標: ({0.x}, {0.y})".format(p))
# 出力: 座標: (3, 4)
注意点
- Python 2.6以降で使用可能です。
- 波括弧内に書式指定を含めることができます。
- 波括弧自体を表示したい場合は、二重の波括弧「{{」「}}」を使用します。
- 順序を入れ替えると引数の順序に注意が必要です。
使い分け
- f-string:
- 簡潔に書きたい場合
- Python 3.6以上を使用している場合
- コード内で直接変数を参照したい場合
- パフォーマンスを重視する場合(f-stringの方が高速)
- formatメソッド:
- Python 2系との互換性が必要な場合
- 文字列を動的に構築する場合
- 同じ値を複数回使用する場合
- 位置引数やキーワード引数を柔軟に使いたい場合
まとめ
Pythonでの文字列フォーマットには、主にf-stringとformatメソッドの2つの方法があります。最新のPythonコードではf-stringが推奨されていますが、formatメソッドも特定のケースでは有用です。両方の方法を理解しておくことで、状況に応じて適切な方法を選択できるようになります。