
Python を学び始めた方にとって、数値や文字列を整形する方法は非常に重要です。特に、format() 関数は、データを見やすく表示するための強力なツールです。本記事では、format() 関数の基本的な使い方から応用例までを詳しく解説します。記事の後半では、for 文と組み合わせて自動で定型メールを作成する方法も紹介します。
実行環境
目次
Python の組み込み関数 format() は、数値や文字列を指定したフォーマットで整形するために使用されます。これにより、データの表示方法を柔軟にコントロールすることが可能です。
format() 関数の基本的な使い方を見てみましょう。以下の例では、数値を小数点以下 2 桁まで表示します。
number = 123.456 formatted_number = format(number, '.2f') print(formatted_number) # 出力: 123.46
解説: format() 関数は、第一引数に整形したい値(この場合は number )、第二引数にフォーマット指定子(ここでは'.2f')を渡します。.2fは、小数点以下 2 桁までの浮動小数点数として表示することを意味します。
str.format() メソッドは、文字列の中に変数や値を埋め込むための方法です。これを使うことで、動的なメッセージやレポートを簡単に作成できます。
以下の例は、名前と年齢を文字列に埋め込む方法です。
name = "太郎" age = 20 message = "私の名前は {} で、年齢は {} 歳です。".format(name, age) print(message)
私の名前は 太郎 で、年齢は 20 歳です。
解説: str.format() メソッドでは、文字列内の{}に対して、format() 関数の引数として渡された値が順番に埋め込まれます。
str.format() メソッドでは、フォーマット指定子を使って値の表示方法を細かく指定できます。
number = 255 hex_number = "16進数の値は: {:x}".format(number) print(hex_number) # 出力: 16進数の値は: ff
解説: {:x}は、数値を 16 進数で表示する指定子です。ここでは、数値255 が 16 進数でff として表示されます。
次に、format() 関数を使って数値を特定の形式で表示するための具体的な例をいくつか紹介します。
整数を特定の桁数に揃えたり、ゼロで埋める方法です。
number = 7 formatted_number = format(number, '03') print(formatted_number) # 出力: 007
解説:'03' は、 3 桁で表示し、足りない桁はゼロで埋めることを意味します。
'02' は、 2 桁で 出力: 07 ,'04' は、 4 桁で 出力: 0007 と表示します。
浮動小数点数の小数点以下の桁数を指定して表示します。
number = 3.14159 formatted_number = format(number, '.2f') print(formatted_number) # 出力: 3.14
解説: '.2f'は、小数点以下 2 桁まで表示する指定子です。
'.1f'は、小数点以下 1 桁で 出力: 123.5 , '.4f'は、小数点以下 3 桁で 出力: 123.4560 と表示します。
大きな数値に対して、桁区切りを追加、符号を付加する方法です。
number = 1000000 formatted_number = format(number, '+,') print(formatted_number) # 出力: +1,000,000
解説:'+,'は、数値にカンマ区切りを付け、符号を表示する指定子です。正の数である場合に + が付きます。
負の数 -1000000 の場合は、出力: -1,000,000 と表示します。
次に、文字列の表示方法をカスタマイズするための具体例を紹介します。
文字列の幅を指定し、特定の文字で埋める方法です。
text = "Python" formatted_text = format(text, '*^10') print(formatted_text) # 出力: **Python**
解説:'*^10'は、文字列を中央揃えで 10 文字幅にし、余白を*で埋める指定子です。
'-<10'は、出力: Hello----- , '>10'のように文字を選択しない場合は、余白にはスペースが入ります。
数値を 10 進数や 16 進数で表示する方法です。
number = 255 decimal = format(number, 'd') # 10 進数 hexadecimal = format(number, 'x') # 16 進数 print(decimal) # 10進数の出力: 255 print(hexadecimal) # 16進数の出力: ff
解説: 'd'は 10 進数、'x'は 16 進数で数値を表示する指定子です。
'b' 指定子を使うと、数値を 2 進数、'o' 指定子を使うと、数値を 8 進数で表示します。
datetimeモジュールを使用して、日付や時刻を指定した形式で表示します。
(注意点:Google Colab で実行すると日本の時刻ではなく、サーバーが置いてある場所の時刻になります。)
from datetime import datetime now = datetime.now() formatted_date = format(now, '%Y-%m-%d %H:%M:%S') print(formatted_date) # 出力例: 2024-01-01 10:30:00
解説: '%Y-%m-%d %H:%M:%S'は、年-月-日 時:分:秒の形式で日付と時刻を表示するフォーマット指定子です。
format()関数を使った応用的な使い方をいくつか紹介します。
テンプレート文字列に複数の変数を挿入する方法です。
template = """ {customer_name} 様 ご注文いただきありがとうございます。以下の商品を発送しました。 注文番号: {order_id} 商品: {product} お届けまでお待ちください。 ショップ名 """ order = { "customer_name": "田中", "order_id": "12345", "product": "ノートパソコン" } message = template.format(**order) print(message)
田中 様 ご注文いただきありがとうございます。以下の商品を発送しました。 注文番号: 12345 商品: ノートパソコン お届けまでお待ちください。 ショップ名
解説: **orderは辞書の内容を使って、特定の場所に値を入れる作業をします。これによって、テンプレート内の{customer_name}、{order_id}、{product}が、それぞれのお客様の名前、注文番号、商品名に置き換えられます。
複数の変数を同時にフォーマットする方法です。
id = "12345" product = "スマートフォン" price = 50000 message = "注文番号:{0}, 商品: {1}, 価格: {2}円".format(id,product, price) print(message) # 出力: 注文番号:12345, 商品: スマートフォン, 価格: 50000円
解説: {0}と{1} と{2}は、format()関数の引数の順番に対応しています。これにより、複数の変数を簡単に挿入できます。
ここでは、format()関数を使用する際の注意点を紹介します。
format()関数内で予約語や特殊文字を扱う際も、適切にエスケープする必要があります。特に、文字列内にプレースホルダー以外の波括弧や特殊文字を含めたい場合には注意が必要です。
template = "計算結果: {value} (単位: {{kg}})" value = 75.5 formatted_text = format(template.format(value=value)) print(formatted_text) # 出力: 計算結果: 75.5 (単位: {kg})
解説: テンプレート内の {{kg}} により、実際の波括弧 {} を表示しつつ、プレースホルダー {value} に数値を挿入しています。このように、特殊文字を含む文字列を扱う際には、エスケープが必要です。
補足
format() 関数は新しい文字列を返すため、元の文字列や数値は変更されません。そのため、フォーマット後の値を別の変数に代入して使用します。
num = 1234.567 formatted_num = format(num, '.2f') print(formatted_num) # 出力: 1234.57 print(num) # 元の出力:1234.567
解説: formatted_num にフォーマットされた結果を代入し、元のnum は変更されません。
for 文とformat() 関数を組み合わせることで、複数のデータを効率的にフォーマットして処理できます。以下に具体的な例を示します。
以下の記事では、 for 文を詳しく紹介しています。併せてご覧ください!
ECサイトなどで複数の注文がある場合、各注文に対して個別のメールメッセージを生成する必要があります。for 文とformat() 関数を組み合わせることで、これを簡単に自動化できます。
# 注文データ(例) orders = [ {"customer_name": "田中", "order_id": "123", "product": "ノートパソコン"}, {"customer_name": "佐藤", "order_id": "124", "product": "スマートフォン"}, {"customer_name": "鈴木", "order_id": "125", "product": "タブレット"} ] # メールテンプレート template = """ {customer_name} 様 ご注文いただきありがとうございます。以下の商品を発送しました。 注文番号: {order_id} 商品: {product} お届けまでお待ちください。 ショップ名 --------------------------- """ # 各注文に対してメールメッセージを生成 for order in orders: message = template.format(**order) print(message)
田中 様 ご注文いただきありがとうございます。以下の商品を発送しました。 注文番号: 123 商品: ノートパソコン お届けまでお待ちください。 ショップ名 --------------------------- 佐藤 様 ご注文いただきありがとうございます。以下の商品を発送しました。 注文番号: 124 商品: スマートフォン お届けまでお待ちください。 ショップ名 --------------------------- 鈴木 様 ご注文いただきありがとうございます。以下の商品を発送しました。 注文番号: 125 商品: タブレット お届けまでお待ちください。 ショップ名 ---------------------------
解説:
月ごとの売上データを自動的に整形し、見やすいレポート形式で出力します。
# 売上データ(例: 年月、部門、売上金額) sales_data = [ {"year_month": "2023-01", "department": "営業", "sales": 1234567}, {"year_month": "2023-01", "department": "マーケティング", "sales": 765432}, {"year_month": "2023-02", "department": "営業", "sales": 987654}, {"year_month": "2023-02", "department": "マーケティング", "sales": 543210} ] # レポートのフォーマットを定義 report_template = """ レポート: {year_month} 部門: {department} 売上金額: ¥{sales:,}円 --------------------------- """ # レポート自動生成 for record in sales_data: report = report_template.format( year_month=record["year_month"], department=record["department"], sales=record["sales"] ) print(report)
レポート: 2023-01 部門: 営業 売上金額: ¥1,234,567円 --------------------------- レポート: 2023-01 部門: マーケティング 売上金額: ¥765,432円 --------------------------- レポート: 2023-02 部門: 営業 売上金額: ¥987,654円 --------------------------- レポート: 2023-02 部門: マーケティング 売上金額: ¥543,210円 ---------------------------
解説:
商品リストを表形式で整形し、見やすく表示します。
products = [ {"name": "ノートパソコン", "price": 120000}, {"name": "スマートフォン", "price": 80000}, {"name": "タブレット", "price": 60000} ] # ヘッダーの表示 header = "{:<15} {:>10}".format("商品名", "価格 (円)") print(header) print("-" * 25) # 各商品の情報をフォーマットして表示 for product in products: line = "{:<15} {:>10,}".format(product["name"], product["price"]) print(line)
商品名 価格 (円) ------------------------- ノートパソコン 120,000 スマートフォン 80,000 タブレット 60,000
解説:
今回は、注文や売上のデータを直接記述していますが、CSV データを読み込んで利用することもできます。CSV の操作方は、以下の記事をご覧ください!
Pythonのformat()関数は、数値や文字列を様々な書式に変換できます。特に、for文と組み合わせて、複数のデータを効率的に処理し、動的なコンテンツを生成できます。この記事を通じて、format()関数の基本から応用までを理解し、実際の業務やプロジェクトで活用できることを目指しました。具体的な例を通じてその利便性を実感していただければ幸いです。
format()関数を積極的に取り入れ、効率的かつ効果的なデータ処理を実現してください!
SHARE
AI/データサイエンス学びはじめの方におすすめの記事
コース一覧
注目記事
新着記事
目次