Python format関数の基礎|文字列に値を埋め込む方法

Python format関数の基本的な使い方を初心者向けに解説。基本的な文字列フォーマット、位置・名前指定、書式設定、f-stringとの比較、実践的な活用方法まで詳しく紹介します。

Learning Next 運営
16 分で読めます

Python format関数の基礎|文字列に値を埋め込む方法

みなさん、文字列に変数を埋め込みたいとき、困ったことはありませんか?

「文字列を作るのって面倒」 「format関数って聞いたことあるけど、よくわからない」 「どうやって使うの?」

こんな疑問、よくありますよね。

でも大丈夫! format関数は、文字列に値を埋め込む便利なツールなんです。

この記事では、format関数の基本から実践的な使い方まで、わかりやすく解説します。 format関数を覚えると、動的で読みやすい文字列が簡単に作れるようになりますよ!

format関数って何?

format関数は、文字列内の{}(波括弧)に値を埋め込むPythonの便利機能です。

プログラミングでは、固定の文字と変数を組み合わせることがよくありますよね。 format関数なら、それが簡単にできちゃいます。

基本的な書き方

まずは、一番シンプルな使い方から見てみましょう。

# 基本構文: "文字列テンプレート".format(値1, 値2, ...)
# 簡単な例
name = "田中"
age = 25
message = "私の名前は{}です。{}歳です。".format(name, age)
print(message) # 私の名前は田中です。25歳です。

{}が値の場所を示しています。 format関数の引数で、順番に値が埋め込まれます。

他の方法と比べてみよう

format関数がどれだけ便利か、比較してみましょう。

name = "佐藤"
score = 85
# 文字列連結(読みにくい)
message1 = "名前: " + name + ", 点数: " + str(score) + "点"
print("文字列連結:", message1)
# % フォーマット(古い方法)
message2 = "名前: %s, 点数: %d点" % (name, score)
print("% フォーマット:", message2)
# format関数(読みやすい)
message3 = "名前: {}, 点数: {}点".format(name, score)
print("format関数:", message3)

format関数なら、文字列の中身がわかりやすいですね。 どこに何が入るか一目でわかります。

基本的な使い方

順番に値を埋め込む

一番シンプルな使い方です。

# 順番に値が入る
template = "今日は{}月{}日、天気は{}です。"
formatted = template.format(12, 25, "晴れ")
print(formatted) # 今日は12月25日、天気は晴れです。
# 色々なデータ型
number = 42
text = "Python"
boolean = True
float_num = 3.14159
message = "数値: {}, 文字列: {}, ブール値: {}, 小数: {}".format(
number, text, boolean, float_num
)
print(message)

位置を指定して埋め込む

値の順番を自由に変えられます。

# 位置を指定
template = "{1}さんは{0}歳で、{2}に住んでいます。"
result = template.format(25, "田中", "東京")
print(result) # 田中さんは25歳で、東京に住んでいます。
# 同じ値を何回も使う
template = "{0}は{1}が好きです。{0}は毎日{1}を食べます。"
result = template.format("太郎", "りんご")
print(result) # 太郎はりんごが好きです。太郎は毎日りんごを食べます。

名前を付けて埋め込む

名前を付けると、もっとわかりやすくなります。

# 名前付きプレースホルダー
template = "{name}さんは{age}歳で、{job}をしています。"
result = template.format(name="佐藤", age=28, job="エンジニア")
print(result)
# 辞書から値を取得
person_info = {
"name": "鈴木",
"age": 35,
"city": "大阪",
"hobby": "読書"
}
template = "{name}さん({age}歳)は{city}在住で、趣味は{hobby}です。"
result = template.format(**person_info) # 辞書をアンパック
print(result)

数値の書式設定

小数点の桁数を指定

数値の表示方法を細かく指定できます。

# 小数点の桁数指定
number = 1234.5678
print("デフォルト: {}".format(number))
print("小数点2桁: {:.2f}".format(number))
print("小数点0桁: {:.0f}".format(number))
print("小数点5桁: {:.5f}".format(number))

大きな数字を読みやすく

桁区切りで読みやすくできます。

# 桁区切り
large_number = 1234567890
print("桁区切りあり: {:,}".format(large_number))
print("桁区切り+小数: {:,.2f}".format(large_number + 0.99))

数字の桁数を揃える

ゼロ埋めで桁数を揃えられます。

# ゼロ埋め
small_number = 42
print("5桁ゼロ埋め: {:05d}".format(small_number))
print("8桁ゼロ埋め: {:08d}".format(small_number))

パーセントで表示

割合をパーセントで表示できます。

# パーセント表示
ratio = 0.8564
print("パーセント(デフォルト): {:.2%}".format(ratio))
print("パーセント(小数1桁): {:.1%}".format(ratio))

文字列の配置

左揃え、右揃え、中央揃え

文字列の位置を調整できます。

# 文字列の配置
name = "Python"
print("左寄せ(10文字): '{:<10}'".format(name))
print("右寄せ(10文字): '{:>10}'".format(name))
print("中央寄せ(10文字): '{:^10}'".format(name))

空白以外の文字で埋める

星印やハイフンで埋めることもできます。

# パディング文字の指定
text = "Hello"
print("星印パディング: '{:*^15}'".format(text))
print("ハイフンパディング: '{:-^15}'".format(text))
print("ドットパディング: '{:.^15}'".format(text))

実用的な活用例

表形式のデータ表示

きれいに揃った表を作れます。

# 表形式の出力
data = [
{"name": "田中太郎", "age": 25, "score": 85},
{"name": "佐藤花子", "age": 30, "score": 92},
{"name": "鈴木一郎", "age": 35, "score": 78}
]
print("{:<10} {:>3} {:>5}".format("名前", "年齢", "点数"))
print("-" * 20)
for person in data:
print("{:<10} {:>3} {:>5}".format(
person["name"], person["age"], person["score"]
))

日付と時刻の表示

日付や時刻もきれいに表示できます。

import datetime
# 現在の日時
now = datetime.datetime.now()
today = datetime.date.today()
print("現在日時: {}".format(now))
print("今日の日付: {}".format(today))
# 日本語形式
birth_date = datetime.date(1990, 5, 15)
print("誕生日: {}年{}月{}日".format(
birth_date.year, birth_date.month, birth_date.day
))

ログメッセージの作成

ログメッセージを統一した形式で作れます。

# ログメッセージの例
def log_message(level, message):
timestamp = datetime.datetime.now()
return "[{:%Y-%m-%d %H:%M:%S}] {}: {}".format(
timestamp, level.upper(), message
)
print(log_message("info", "システム開始"))
print(log_message("warning", "メモリ使用量が高い"))
print(log_message("error", "データベース接続失敗"))

テンプレートの再利用

メールテンプレート

同じ形式のメールを量産できます。

# メールテンプレート
email_template = """
件名: {subject}
{recipient}様
いつもお世話になっております。
{company}の{sender}です。
{message}
何かご不明な点がございましたら、
お気軽にお問い合わせください。
{signature}
"""
# メール情報
email_data = {
"subject": "会議の件について",
"recipient": "田中様",
"company": "ABC株式会社",
"sender": "佐藤",
"message": "来週の会議についてご連絡いたします。",
"signature": "佐藤
ABC株式会社
sato@abc.com"
}
# メール生成
formatted_email = email_template.format(**email_data)
print(formatted_email)

設定情報の表示

システム設定を統一形式で表示できます。

# 設定フォーマット
config_templates = {
"database": "データベース: {host}:{port}/{database} (ユーザー: {user})",
"server": "サーバー: {protocol}://{host}:{port} (SSL: {ssl})",
"storage": "ストレージ: {type} - {capacity}GB (使用率: {usage:.1%})"
}
# 設定データ
configs = {
"database": {
"host": "localhost",
"port": 5432,
"database": "myapp",
"user": "app_user"
},
"server": {
"protocol": "https",
"host": "api.example.com",
"port": 443,
"ssl": True
},
"storage": {
"type": "SSD",
"capacity": 500,
"usage": 0.75
}
}
# 設定情報の表示
for config_type, config_data in configs.items():
template = config_templates[config_type]
formatted = template.format(**config_data)
print(f"• {formatted}")

f-stringとの使い分け

各手法の比較

format関数とf-stringの違いを見てみましょう。

# 同じ結果を違う方法で
name = "田中"
age = 25
score = 85.5
# format関数(位置指定)
result1 = "名前: {}, 年齢: {}, 点数: {:.1f}".format(name, age, score)
print("format(位置):", result1)
# format関数(名前指定)
result2 = "名前: {name}, 年齢: {age}, 点数: {score:.1f}".format(
name=name, age=age, score=score
)
print("format(名前):", result2)
# f-string(Python 3.6+)
result3 = f"名前: {name}, 年齢: {age}, 点数: {score:.1f}"
print("f-string:", result3)

format関数が向いている場面

format関数が有利な場面もあります。

テンプレートの再利用

  • 同じ形式の文字列を何回も作る時
  • 設定ファイルからテンプレートを読み込む時

国際化対応

  • 多言語に対応する時
  • 言語ごとにテンプレートを分ける時

動的なフォーマット

  • 実行時にフォーマットを決める時
  • 条件によって表示形式を変える時

使用時の注意点

波括弧を文字として表示

波括弧を文字として表示したい場合は、二重にします。

value = 42
print("辞書形式: {{'key': {}}}".format(value))
print("集合形式: {{{}, {}, {}}}".format(value, value + 1, value + 2))

複雑な式は避ける

読みにくくなる複雑な式は、事前に変数に入れましょう。

# 複雑すぎる式は避ける(悪い例)
data = [1, 2, 3, 4, 5]
# result = "結果: {}".format(sum([x**2 for x in data if x % 2 == 0]))
# 読みやすくする(良い例)
even_squares = [x**2 for x in data if x % 2 == 0]
result = sum(even_squares)
print("偶数の二乗の合計: {}".format(result))

まとめ

format関数は、文字列に値を埋め込む便利なツールです。

今回学んだポイント

format関数の特徴

  • 読みやすい: {}で値の場所がわかりやすい
  • 柔軟性: 位置指定、名前指定が可能
  • 再利用性: テンプレートの使い回しが簡単

主な機能

  • 基本的な値の埋め込み
  • 位置指定での値の配置
  • 名前付きでの値の指定
  • 数値フォーマット(小数点、桁区切り)
  • 文字列の配置(左右中央揃え)

便利なフォーマット指定

  • 小数点桁数の制御
  • 桁区切りでの表示
  • ゼロ埋めでの桁数揃え
  • パーセント表示
  • 文字列の配置制御

実用的な活用例

  • 表形式データの表示
  • 日付と時刻の表示
  • ログメッセージの統一
  • メールテンプレートの作成
  • 設定情報の表示

使い分けのポイント

  • テンプレート再利用: format関数が有利
  • 簡単な文字列作成: f-stringが便利
  • 国際化対応: format関数が適している

format関数を覚えると、文字列処理がとても楽になります。 まずは基本的な値の埋め込みから始めて、徐々に高度な機能も試してみてください。

きっと、もっと読みやすいプログラムが書けるようになりますよ!

関連記事