sec01 - 文字列のフォーマット [概要]
スポンサーリンク

フォーマットとは

Pythonでは文字列をただ繋げるだけでなく、「見やすく整える」ことができます。この「整える」作業をフォーマット と呼びます。

  • 数字にカンマを入れて「1,000」のように表示する
  • 小数点以下の桁数を揃える
  • 数値をパーセント表記にする ("0.1234" → "12.34%")

上記のような「フォーマット」機能が用意されています。

Pythonでは主に次の2つの方法でフォーマットができます。

  1. 文字列の formatメソッドを使う方法
  2. f-string を使う方法(Python 3.6以降)

このレクチャーでは、上記2つの書式の基本的な概要について解説しますが、比較のために+ 演算子を使う方法についても軽くおさらいします。 formatメソッドやf-stringは、「整える」以外にも単に文字列を連結させる用途で使われることもあるためです。

次以降のレクチャーでは、formatメソッドとf-stringについて詳しく学習します。今後のレクチャーの流れは次の通りです。

  1. 文字列のフォーマット [概要] (このレクチャー)
  2. formatメソッドの基本・定義方法
  3. f-stringの基本・定義方法
  4. 文字列のフォーマット(書式指定)

プラス演算子でつなぐ方法

プラス演算子の概要

まずは1番シンプルな、+ 演算子 を使う方法についておさらいします。ここはさらっと流して頂ければと思います。

name = 'Nico'
age = 10
text = 'I am ' + name + ', ' + str(age) + '.'
print(text)  # I am Nico, 10.

+ 演算子を使う方法は、初学者にも分かりやすいというメリットがある一方で、文字列を『連結する』という機能しかありません。そのため、数字を3桁ごとにカンマで区切るなどのフォーマット処理を、簡潔に1行で記述することは困難です。

プラス演算子のまとめ

ポイント

  • 変数が文字列ならそのまま使えるが、数字(int/ float)は str() で文字列に変換する必要がある
  • 単純な結合なら分かりやすい

メリット

  • 直感的、Python初心者でもすぐ理解できる
  • 追加の記号や関数が不要(ただしstr()は必要になることが多い)

デメリット

  • 数字を文字列に変換しないとエラーになる
  • 長い文章や複数の変数を入れると可読性が下がる
  • 桁区切りなどのフォーマット処理を行おうとすると、1行でシンプルに書けない
スポンサーリンク

format()メソッドを使う方法

format()メソッドの概要

formatメソッドは、テンプレートの文字列の中に波カッコのペア({})を仕込んでおき、そこに変数の値を置換していきます。

template = 'I am {}, {}.'
name = 'Nico'
age = 10
text = template.format(name, age)
print(text)  # I am Nico, 10.

formatメソッドを使う手順としては、テンプレートとして'I am {}, {}'のような文字列を用意します。このテンプレート文字列は通常のString型で、String型に用意されているformatメソッドを使用することができます。format()の丸カッコ内で指定した変数の値が置換されるのですが、複数の{}と変数が指定されている場合は、それぞれ左側から順番に置換されていきます。つまり、"I am "の直後の{}には変数"name"の値が、", "の直後の{}には変数"age"の値が置換されます。

尚、formatメソッドでは、数字を文字列に変換する手間がありません。"age"変数の数値をstr(age)のように変換しなくてもエラー無く処理してくれます。

format()メソッドのフォーマット

formatメソッドは、プラス演算子を使用した時のような文字の連結機能の他に、桁区切りなどのフォーマット処理を行うことができます。

number = 1234567890
formatted_number = '{:,}'.format(number)
print(formatted_number)  # 1,234,567,890

上記コードを実行すると、1,234,567,890の結果が得られます。このように3桁ごとにカンマを挿入するような処理をプラス演算子を使って実現しようとすると大変ですが、formatメソッドを使用すると1行で書けてしまいます。

書式指定の書き方は、{:,}と記述します。{}の中でコロン(:)入力し、コロンの右側で書式指定を行います。コロンの後にカンマ(,)を記述することで、桁区切りされた数字の文字列を得ることができます。

書式指定の記述方法については、専用のレクチャーで詳しく解説します。

format()メソッドのまとめ

ここまで学習した内容のまとめです。formatメソッドは、他にも書き方や便利な使い方がありますので、続きは専用のレクチャーで学習しましょう。

ポイント

  • 数字も自動で文字列に変換してくれる(str()不要)
  • {} の中に変数の値が入る

メリット

  • 数字を文字列に変換する手間がない
  • 長い文章でも可読性が比較的保たれる
  • 桁区切りなどのフォーマット処理を行うことができる
  • テンプレート文字列を定義する行と、置換を行う行を分けて書くことができる

デメリット

  • format() の書き方に慣れる必要がある
  • 変数は format() に引数として入力していかなければならない (f-stringを使う方法との比較)
  • f-stringと比べて、可読性が低くなる場合がある

f-stringを使う方法

f-stringの概要

f-stringは、Python 3.6から実装された新しい文字列フォーマットの方法になります。formatメソッドよりも後に実装されたこともあり、formatメソッドの利点を活かしつつ、より簡潔に書くことができます。変数を直接埋め込むことができ、可読性が高いのが特徴です。書き方は、f'文字列{variable}'の形式で、クォーテーションの前に"f"を付けることと、波カッコ{}の中に変数名を直接記述することが特徴です。

name = 'Nico'
age = 10
text = f'I am {name}, {age}.'
print(text)  # I am Nico, 10.

f-stringは、formatメソッドのテンプレート文字列と同じような書式になります。f-stringを定義するときに、変数の値などが評価されて、フォーマット処理後の文字列が"text"変数へ代入されます。

formatメソッドと違い、テンプレート文字列の後に.format()でメソッドを使用する必要がないので、コードを書く手間が省けますし、見やすくなるので可読性が向上します。

f-stringのフォーマット

f-stringもformatメソッドと同様に、文字や数値をフォーマットすることができます。formatメソッドと同じように、波カッコの中で書式指定します。ここでは、数値をパーセント形式で表示する方法を紹介します。

value = 0.123456
formatted_value = f'{value:.2%}'
print(formatted_value)  # 12.35%

上記コードを実行すると、12.35%の結果が得られます。

f-stringの波カッコ内の記述方法ですが、変数名の後にコロン(:)を付けて、コロンの右側で書式指定を行います。コロンの後の.2%の意味ですが、.2小数点以下2桁に揃えることを表わし、%パーセント形式に変換することを意味します。

f-stringのまとめ

ここまで学習した内容のまとめです。f-stringもformat()メソッド同様に、他にも書き方や便利な使い方がありますので、続きは専用のレクチャーで学習しましょう。

ポイント

  • 変数名をそのまま {} の中に記述する
  • 数字もstr()の変換無しでそのまま埋め込める

メリット

  • 変数名がそのまま見えるので読みやすい
  • 直感的で書きやすく、変換も自動
  • formatメソッドよりコードが短く済み、可読性が向上する

デメリット

  • Python 3.6未満では使えない
  • formatメソッドと違い、テンプレート文字列を定義する行と、置換を行う行を分けて書きたい時に使えない

全体のまとめ

文字の連結やフォーマットに関する一般的な指針としては、短く簡単な文章は + でもOKですが、Python 3.6以降を使っているならf-stringが1番便利です。 format()メソッドは、古い環境の場合や、テンプレート文字列の定義と置換処理の行を分けてコードを書きたい時などに選択すると良いでしょう。

方法特徴メリットデメリット主な使いどころ
+ 演算子文字列を手動で結合直感的、すぐ書ける数字は変換必要、長い文章は読みにくい短い文章や初心者の練習用
format(){} に、.format()で指定した変数の値を置換するstr()変換不要、柔軟記述がやや冗長Python 3.5以前でも使える、可変な文章
f-string直接、{} に変数やフォーマットの式を記述するformatのメリットに加え、読みやすく直感的Python 3.6以降限定日常的な文字列組み立てに最適
スポンサーリンク