Pythonの書式指定とは?基本から使い分け方まで初心者向けに解説

この記事のポイント

Pythonの書式指定は、美しく整った出力を実現するために知っておきたい重要な機能です。

この記事を読むと、次のようなことがわかります。

  • %演算子を使った従来の書式指定方法
  • format関数による柔軟な文字列の整形テクニック
  • f文字列という現代的な書式指定の書き方
  • 数値の桁揃えや小数点制御の具体的な方法

この記事を通して、書式指定の使い方をマスターすれば、データを見やすく表示できるようになります。

ぜひこの記事を読んで、ユーザーにとって理解しやすい出力を作成できるようになり、デバッグ効率も向上させるスキルを身に付けましょう。

目次

書式指定の基礎

Pythonで美しく整った出力を作るために、欠かせないのが書式指定です。

プログラムを書いていると、「数値の桁を揃えたい」「小数点以下を決まった桁数で表示したい」といった場面によく遭遇します。
書式指定を使えば、こうした要望を簡単に実現できます。

ここでは、書式指定とは何か、どんな場面で使うのか、初心者の方にもわかりやすく解説していきます。

【関連】
Pythonをもっと詳しく学ぶならpaizaラーニング

書式指定とは

書式指定とは、文字列や数値を決められた形に整えて表示する仕組みのことです。

例えば、「小数点以下を2桁だけ表示したい」「数値の前にゼロを付けて桁数を揃えたい」といった場合に使います。

データをそのまま表示するだけでなく、見た目を整えることで、プログラムの出力結果が読みやすくなります。

price = 1500 tax_rate = 0.1 total = price * (1 + tax_rate) print("合計金額: ¥{:.0f}".format(total))

出力結果

合計金額: ¥1650

この例では、{:.0f}という書式指定を使って、小数点以下を表示せずに金額を表示しています。

print関数と書式指定の関係

通常のprint関数では、変数をそのまま出力するため、見た目が整わないことがあります。

そんなときに使うのが書式指定です。データの表示を美しく整え、読みやすい出力を作ることができます。
特に複数のデータを組み合わせて表示する際に、その効果が発揮されます。

違いを確認してみましょう。

name = "ライオン" age = 5 weight = 180.5 print(name, age, weight) print("名前: {}, 年齢: {}歳, 体重: {:.1f}kg".format(name, age, weight))

出力結果

ライオン 5 180.5
名前: ライオン, 年齢: 5歳, 体重: 180.5kg

書式指定を使った方が、情報が整理されて見やすくなっているはずです。

代表的な書式指定の方法

Pythonには主に3つの書式指定方法があります。

  • %演算子: 古くから使われている方法で、シンプルな書式指定に適しています
  • format関数: より柔軟な指定が可能で、複雑な書式にも対応できます
  • f文字列: Python 3.6以降で使える最新の方法で、直感的で読みやすいコードが書けます

それぞれに特徴があるため、状況に応じて使い分けることが大切です。

実際に、3つの書き方を見てみましょう。

animal = "ゾウ" count = 3 print("動物園には%sが%d頭います" % (animal, count)) print("動物園には{}が{}頭います".format(animal, count)) print(f"動物園には{animal}が{count}頭います")

出力結果

動物園にはゾウが3頭います
動物園にはゾウが3頭います
動物園にはゾウが3頭います

3つの書き方のイメージがつかめたでしょうか?

旧式の書式指定「%演算子」の使い方

%演算子による書式指定は、Pythonの初期から使われてきた伝統的な方法です。

シンプルな構文で基本的な書式指定ができるため、今でも多くのコードで見かけます。他のプログラミング言語(C言語など)でも似た書き方をするため、馴染みのある方も多いでしょう。

ここでは、%演算子の基本的な使い方から応用的なテクニックまでくわしく解説していきます。

基本構文と使い方

%演算子では、文字列の中に「%s」「%d」「%f」といったプレースホルダー(置き換える場所の目印)を置きます。

文字列の後ろに%演算子を使って、実際の値をタプル形式(括弧で囲んだ形)で指定します。

実際のコード例を見てみましょう。

animal_name = "パンダ" animal_count = 2 average_weight = 85.5 result = "動物名: %s, 頭数: %d, 平均体重: %.1fkg" % (animal_name, animal_count, average_weight) print(result)

出力結果

動物名: パンダ, 頭数: 2, 平均体重: 85.5kg

%sは文字列、%dは整数、%fは小数を表します。

実際、このプログラム例で%sに文字列、%dに整数、%.1fに小数(小数点以下1桁)を指定しているのが確認できるかと思います。

整数・小数・文字列の具体例

各データ型に応じた書式指定を見てみましょう。

%dは整数専用で、小数点以下は切り捨てられます。%fは小数用で、%.2fのように小数点以下の桁数を指定できます。

%sは文字列用ですが、実際にはどのデータ型でも文字列として表示してくれる便利な指定です。

実際の例を見てみましょう。

tiger_age = 7 tiger_height = 95.678 tiger_name = "トラ" print("名前: %s" % tiger_name) print("年齢: %d歳" % tiger_age) print("身長: %.2fcm" % tiger_height) print("身長(小数点1桁): %.1fcm" % tiger_height)

出力結果

名前: トラ
年齢: 7歳
身長: 95.68cm
身長(小数点1桁): 95.7cm

%.2fは小数点以下2桁、%.1fは小数点以下1桁という形式で表示します。四捨五入も自動で行われます。

0埋め・桁数指定の方法

数値の前にゼロを付けて桁数を揃える「0埋め」は、連番や時刻表示でよく使われます。

%05dは5桁の整数という形式を指定し、足りない部分を0で埋めることを意味しています。%08.2fのように、全体の桁数と小数点以下の桁数を同時に指定することも可能です。

実際の例を見てみましょう。

rabbit_id = 42 rabbit_weight = 2.5 print("ウサギID: %05d" % rabbit_id) print("ウサギID: %03d" % rabbit_id) print("体重: %06.1fkg" % rabbit_weight) print("体重: %08.2fkg" % rabbit_weight)

出力結果

ウサギID: 00042
ウサギID: 042
体重: 0002.5kg
体重: 00002.50kg

%06.1fや%08.2fでは小数点も1文字として数えています

例えば、2.5は「2」「.」「5」の3文字なので、6桁に揃えるため左側に0を3つ追加しているということです。

format関数を使った書式指定の基本

format関数は、Python 2.7以降で導入された書式指定方法で、%演算子よりも柔軟で読みやすいのが特徴です。

プレースホルダーに番号や名前を付けられるため、複雑な文字列でも管理しやすくなります。現在でも広く使われている手法で、さまざまな場面で活躍します。

基本構文とプレースホルダーの指定

format関数では、文字列内に{}を置いて、その後ろに.format()メソッドで値を指定します。
{}内に番号を入れることで、引数の順序を自由に変更することもできます。

また、同じ値を複数の場所で使うこともできるので覚えておきましょう。

実際のコード例です。

bear_name = "クマ" bear_age = 8 bear_habitat = "森林" print("{}は{}歳で、{}に住んでいます".format(bear_name, bear_age, bear_habitat)) print("{0}は{1}歳です。{0}の住処は{2}です".format(bear_name, bear_age, bear_habitat))

出力結果

クマは8歳で、森林に住んでいます
クマは8歳です。クマの住処は森林です

番号を指定すると、{0}で最初の引数を何度でも使えます。同じ値を繰り返し表示したい場合に便利です。

数値(整数・小数)の書式指定

format関数では、{}内にコロン(:)を付けて書式を指定します。

:dは整数、:.2fは小数点以下2桁の小数を表します。%演算子と似ていますが、より直感的でわかりやすい記述ができます。

giraffe_height = 520.789 giraffe_count = 4 print("キリンの身長: {:.1f}cm".format(giraffe_height)) print("キリンの身長: {:.2f}cm".format(giraffe_height)) print("キリンの頭数: {:d}頭".format(giraffe_count)) print("合計身長: {:.0f}cm".format(giraffe_height * giraffe_count))

出力結果

キリンの身長: 520.8cm
キリンの身長: 520.79cm
キリンの頭数: 4頭
合計身長: 2083cm

{:.1f}は小数点以下1桁で表示しますが、{:.0f}は小数点以下を表示せず、整数のように表示します。

0埋め・右寄せ・左寄せの指定方法

format関数では文字の配置を細かく制御できます。
例えば、:>8は8文字の幅を確保した上で右寄せにします。

うまく組み合わせることで、表のような整ったレイアウトを作ることもできます。

monkey_id = 123 monkey_name = "サル" print("ID: {:05d}".format(monkey_id)) print("名前: {:>8}".format(monkey_name)) print("名前: {:<8}".format(monkey_name)) print("名前: {:^10}".format(monkey_name)) print("ID(右寄せ): {:>8d}".format(monkey_id))

出力結果

ID: 00123
名前:       サル
名前: サル
名前:   サル
ID(右寄せ):      123

このコード例では次のような形式での出力を指定しています。

  • :05d: 5桁の0埋め(足りない桁を0で埋める)
  • :>8: 8文字幅で右寄せ(右側に文字を寄せる)
  • :<8: 8文字幅で左寄せ(左側に文字を寄せる)
  • :^10: 10文字幅で中央寄せ(中央に文字を配置する)
  • :>8d: 8桁の整数幅で右寄せ(右側に数字を寄せる)

データを整形してターミナルやログに出力する場面では、ほぼ必須の知識です。ぜひ、このテクニックは覚えておきましょう。

format関数と文字列連結・演算子との関係

+演算子で文字列を連結する方法と比べて、format関数は型変換を自動で行ってくれるため便利です。

また、複数の変数を扱う場合も、format関数の方が可読性が高くなります。文字列が長くなるほど、その差は顕著に現れます。

違いを比較してみましょう。

dolphin_name = "イルカ" dolphin_speed = 55.5 result1 = dolphin_name + "の最高速度は" + str(dolphin_speed) + "km/hです" print(result1) result2 = "{}の最高速度は{:.1f}km/hです".format(dolphin_name, dolphin_speed) print(result2)

出力結果

イルカの最高速度は55.5km/hです
イルカの最高速度は55.5km/hです

+演算子ではstr()で数値を文字列に変換する必要がありますが、format関数は自動で変換してくれます。

コードもすっきりして読みやすくなっているのがわかるでしょう。

f文字列による最新の書式指定

Python 3.6で導入されたf文字列は、現在最も推奨されている書式指定の方法です。

変数名を直接文字列内に記述でき、実行速度も速いため、多くの開発者に愛用されています。直感的でわかりやすく、コードが読みやすくなるのが最大の魅力です。

ここでは、f文字列の基本から応用まで解説していきます。

f文字列とは

f文字列は、文字列の先頭に「f」を付けることで使える書式指定方法です。

変数名を{}内に直接書けるため、コードが読みやすくなります。また、従来の方法よりも実行速度が速く、Python 3.6以降では標準的な方法として広く採用されています。

直感的でわかりやすい構文が最大の特徴です。

penguin_name = "ペンギン" penguin_count = 12 message = f"{penguin_name}が{penguin_count}羽います" print(message) message2 = "{}が{}羽います".format(penguin_name, penguin_count) print(message2)

出力結果

ペンギンが12羽います
ペンギンが12羽います

f文字列は、文字列の前にfを付けて、{}の中に変数名をそのまま書くだけです。
format関数よりもシンプルで、直感的に書けるのがわかるかと思います。

基本構文と変数の埋め込み方法

f文字列では、{}内に変数名をそのまま記述できます。

変数だけでなく、{animal.name}のようにオブジェクトの情報や、{animals[0]}のようにリストの要素も直接参照できます。
複雑なデータ構造でも簡潔に表現することが可能です。

cat_info = {"name": "ネコ", "age": 3, "color": "黒"} weights = [4.2, 3.8, 5.1] print(f"名前: {cat_info['name']}") print(f"年齢: {cat_info['age']}歳") print(f"最初のネコの体重: {weights[0]}kg") print(f"全体の情報: {cat_info['name']}は{cat_info['color']}色です")

出力結果

名前: ネコ
年齢: 3歳
最初のネコの体重: 4.2kg
全体の情報: ネコは黒色です

辞書の値や、リストの要素も{}の中で直接参照できます。
変数の値が動的に変更されても、常に最新の値が反映されるので、覚えておきましょう。

f文字列での数値・小数点・0埋め指定

f文字列でも、従来の書式指定と同じように数値の表示形式を細かく制御できます。

horse_speed = 65.789 horse_number = 7 print(f"ウマの最高速度: {horse_speed:.1f}km/h") print(f"ウマの最高速度: {horse_speed:.2f}km/h") print(f"ウマの番号: {horse_number:03d}") print(f"ウマの番号: {horse_number:05d}") print(f"速度(整数): {horse_speed:.0f}km/h")

出力結果

ウマの最高速度: 65.8km/h
ウマの最高速度: 65.79km/h
ウマの番号: 007
ウマの番号: 00007
速度(整数): 66km/h

{horse_speed:.1f}のように、変数名の直後に:書式を付けるだけです。format関数と同じ書式指定が使えます。

変数名の直後に書式を書けるため、どの変数にどんな書式を適用しているかが一目でわかります。

f文字列と演算子の併用

f文字列の{}の中には、変数だけでなく計算式も直接書くことができます。

例えば、「2つの数を足した結果を表示したい」という場合、わざわざ計算結果を別の変数に入れる必要がありません。{}の中で計算して、そのまま表示できるのです。

これにより、コードがシンプルになり、読みやすくなります。

実際の例を見てみましょう。

sheep_count = 15 sheep_weight = 45.5 print(f"ヒツジの総数: {sheep_count}頭") print(f"1頭あたりの体重: {sheep_weight}kg") print(f"総重量: {sheep_count * sheep_weight:.1f}kg") print(f"平均より重い: {sheep_weight > 40}") print(f"体重の2倍: {sheep_weight * 2:.0f}kg")

出力結果

ヒツジの総数: 15頭
1頭あたりの体重: 45.5kg
総重量: 682.5kg
平均より重い: True
体重の2倍: 91kg

このコード例では、{sheep_count * sheep_weight:.1f}のように、{}の中で掛け算をして、その結果を小数点以下1桁で表示しています。

計算と表示を一度に行えるため、余計な変数を作る必要がありません。

よくある質問(Q&A)

Q: どの書式指定方法を使えばよいですか? 

A: Python 3.6以降を使っているなら、f文字列を推奨します。読みやすく、実行速度も速いためです。古いバージョンを使う場合はformat関数が適しています。

name = "コアラ" print(f"名前: {name}")

Q: 小数点の表示桁数はどう制御しますか? 

A: コロンの後に.と桁数、fを付けます。例えば:.2fは小数点以下2桁を表示します。四捨五入も自動で行われます。

value = 3.14159 print(f"円周率: {value:.2f}")

Q: 文字列の幅を揃えるにはどうしますか? 

A: :の後に幅の数値を指定します。>で右寄せ、<で左寄せ、^で中央寄せができます。表形式のデータ表示に便利です。

animals = ["イヌ", "ウサギ", "ハムスター"] for animal in animals: print(f"|{animal:^8}|")

Q: 0埋めと通常の右寄せの違いは? 

A: 0埋めは数値の前に0を付けて桁を揃えます。:05dは5桁の0埋めです。通常の右寄せ:>5dは空白で埋めます。

num = 42 print(f"0埋め: {num:05d}") print(f"右寄せ: {num:>5d}")

Q: f文字列で複雑な計算はできますか? 

A: はい、{}内に計算式や関数呼び出しを記述できます。ただし、複雑すぎる場合は事前に変数に代入する方が読みやすくなるので、注意しましょう。

x, y = 10, 20 print(f"合計: {x + y}, 平均: {(x + y) / 2:.1f}")

まとめ

Pythonの書式指定は、プログラムの出力を美しく整えるために欠かせない機能です。

この記事では、書式指定の基本的な構文から実用的な応用例まで解説しました。

書式指定の活用場面について、確認しておきましょう。

書式指定が活躍する場面

  • 数値の小数点以下の桁数を揃えて表示したいとき
  • 数値の前にゼロを付けて桁数を統一したいとき
  • 文字列と数値を組み合わせて見やすく表示したいとき
  • 表形式のデータを整った形で出力したいとき

書式指定を使う上で押さえておきたいポイントは、次の通りです。

重要なポイント

  • %演算子はシンプルな書式設定に適している
  • format関数は柔軟性が高く、複雑な書式にも対応できる
  • f文字列は最新で、最も推奨される直感的な記述方法
  • 数値の桁揃えや小数点制御で見やすい出力を実現できる
  • 用途に応じて適切な書式指定方法を選択する

初めて書式指定を学ぶ方も、この記事で紹介した基本的な使い方と実用例を参考に、実際にコードを書いてみてください。

特に、Python 3.6以降を使っている場合は、f文字列から始めることをおすすめします。直感的で読みやすく、実行速度も速いため、現代のPython開発では標準的な方法となっています。

ぜひ書式指定を正しく理解し活用することで、より読みやすく保守しやすいコードが書けるようになりましょう。

レベルを更に上げたい方はpaizaプログラミングスキルチェックへ

  1. paizaラーニングトップ
  2. ナレッジ
  3. Pythonのナレッジ記事一覧
  4. Pythonの書式指定とは?基本から使い分け方まで初心者向けに解説