Python format関数の基礎|文字列に値を埋め込む方法
Python format関数の基本的な使い方を初心者向けに解説。基本的な文字列フォーマット、位置・名前指定、書式設定、f-stringとの比較、実践的な活用方法まで詳しく紹介します。
Python format関数の基礎|文字列に値を埋め込む方法
みなさん、文字列に変数を埋め込みたいとき、困ったことはありませんか?
「文字列を作るのって面倒」 「format関数って聞いたことあるけど、よくわからない」 「どうやって使うの?」
こんな疑問、よくありますよね。
でも大丈夫! format関数は、文字列に値を埋め込む便利なツールなんです。
この記事では、format関数の基本から実践的な使い方まで、わかりやすく解説します。 format関数を覚えると、動的で読みやすい文字列が簡単に作れるようになりますよ!
format関数って何?
format関数は、文字列内の{}(波括弧)に値を埋め込むPythonの便利機能です。
プログラミングでは、固定の文字と変数を組み合わせることがよくありますよね。 format関数なら、それが簡単にできちゃいます。
基本的な書き方
まずは、一番シンプルな使い方から見てみましょう。
# 基本構文: "文字列テンプレート".format(値1, 値2, ...)
# 簡単な例name = "田中"age = 25message = "私の名前は{}です。{}歳です。".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 = 42text = "Python"boolean = Truefloat_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 = 1234567890print("桁区切りあり: {:,}".format(large_number))print("桁区切り+小数: {:,.2f}".format(large_number + 0.99))
数字の桁数を揃える
ゼロ埋めで桁数を揃えられます。
# ゼロ埋めsmall_number = 42print("5桁ゼロ埋め: {:05d}".format(small_number))print("8桁ゼロ埋め: {:08d}".format(small_number))
パーセントで表示
割合をパーセントで表示できます。
# パーセント表示ratio = 0.8564print("パーセント(デフォルト): {:.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 = 25score = 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 = 42print("辞書形式: {{'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関数を覚えると、文字列処理がとても楽になります。 まずは基本的な値の埋め込みから始めて、徐々に高度な機能も試してみてください。
きっと、もっと読みやすいプログラムが書けるようになりますよ!