Python 文字列フォーマット

PythonBeginner
オンラインで実践に進む

はじめに

Python 文字列フォーマットの実験(Lab)へようこそ。文字列を適切にフォーマットすることは、単純な print 文から複雑なレポートや Web ページの生成に至るまで、あらゆる場面で使用される、あらゆるプログラミング言語における基本的なタスクです。Python には文字列をフォーマットするためのいくつかの方法があり、それぞれに利点とユースケースがあります。

この実験では、Python における文字列フォーマットの進化を探ります。まず伝統的な % 演算子から始め、次に、より柔軟な str.format() メソッドに進みます。さらに、Python 3.6 で導入されたモダンで推奨されるアプローチである f-Strings を習得し、数値を効果的にフォーマットする方法を学びます。最後に、信頼できないソースからのテンプレートを扱うための安全なオプションである Template 文字列について発見します。

この実験を終えるまでに、Python プロジェクトで適切な文字列フォーマット技術を選択し、使用する方法について包括的な理解を得られるでしょう。

% 演算子の使用

このステップでは、% 演算子を使用した古いスタイルの文字列フォーマットについて学習します。C 言語の printf 関数から継承されたこの方法は、%s (文字列用) や %d (整数用) のようなフォーマット指定子を使用して、値を文字列に挿入します。

この方法は機能しますが、いくつかの癖があり、最新の代替手段(f-Strings や str.format())ほど柔軟ではありません。新しいコードでは、f-Strings または str.format() の使用を強く推奨します。

注記: WebIDE (VS Code のようなもの) の使用に慣れていない場合は、まずこちらの実験 (lab) で学習してください。

まず、左側のファイルエクスプローラーからファイル step1.py を開きます。

次に、文字列と整数をフォーマットする方法を確認するために、step1.py に以下のコードを追加します。

## % 演算子:古いスタイルの文字列フォーマット (新しいコードには非推奨)
name = 'Pete'
print('Hello %s' % name)  ## %s = 文字列プレースホルダ

num = 5
print('I have %d apples' % num) ## %d = 整数プレースホルダ

ファイルを保存し、ターミナルから実行して出力を確認します。

python3 step1.py

%s が name の値に、%d が num の値に置き換えられた、以下の出力が表示されるはずです。

Hello Pete
I have 5 apples

str.format の使用

このステップでは、Python 3 で導入された(そして 2.7 にもバックポートされた)より強力で柔軟な文字列フォーマットの方法である str.format() メソッドを探ります。このメソッドは、プレースホルダーとして波括弧 {} を使用します。

format() に引数を渡すと、それらはプレースホルダーに順番に挿入されます。波括弧の中に数値を指定して、引数をその位置で参照することもできます。

ファイルエクスプローラーからファイル step2.py を開いてください。

step2.py に次のコードを追加します。最初の例は空の波括弧を使用し、2 番目の例は位置引数を使用します。

## str.format() method: modern string formatting (Python 2.7+)
name = 'John'
age = 20

## 引数は順番に挿入される
print("Hello I'm {}, my age is {}".format(name, age))

## 引数は位置に基づいて挿入される
print("Hello I'm {0}, my age is {1}".format(name, age))

ファイルを保存し、ターミナルで実行します。

python3 step2.py

両方の print 文は同じ結果を生成し、str.format() の 2 つの使用方法を示しています。

Hello I'm John, my age is 20
Hello I'm John, my age is 20

フォーマット済み文字列リテラル、または f-Strings

このステップでは、Python 3.6 以降で推奨される文字列フォーマットの方法である f-Strings を習得します。f-String は、f または F を接頭辞とする文字列リテラルです。これらの文字列では、Python の式を波括弧 {} で囲んで直接埋め込むことができます。

f-Strings は実行時に評価されるため、簡潔で読みやすいだけでなく、非常に強力です。

ファイルエクスプローラーからファイル step3.py を開いてください。

基本構文と式

まず、基本的な構文と式を埋め込む方法を見てみましょう。step3.py に次のコードを追加します。

## f-string: recommended way to format strings (Python 3.6+)
name = 'Elizabeth'
print(f'Hello {name}!')  ## f プレフィックスにより {} 内に式を記述可能

## f-strings は式をサポート:{} 内に計算を含めることができる
a = 5
b = 10
print(f'Five plus ten is {a + b} and not {2 * (a + b)}.')

複数行の f-Strings

f-String を括弧で囲むことで、複数行の文字列を作成することもできます。この例を step3.py に追加してください。

name = 'Robert'
messages = 12
multiline_string = (
    f'Hi, {name}. '
    f'You have {messages} unread messages'
)
print(multiline_string)

デバッグのための = 指定子

Python 3.8 以降では、= 指定子を使用して、式とその値の両方を自動的に出力でき、デバッグに非常に役立ちます。この最後のコード片を step3.py に追加します。

## = specifier: prints both variable name and value (Python 3.8+)
from datetime import datetime
now = datetime.now().strftime("%b/%d/%Y - %H:%M:%S")
print(f'date and time: {now=}')

これで、ファイルを保存し、ターミナルから実行します。

python3 step3.py

3 つの例すべてからの出力が表示されます。出力の日時は、実行するたびに異なることに注意してください。

Hello Elizabeth!
Five plus ten is 15 and not 30.
Hi, Robert. You have 12 unread messages
date and time: now='...'

数値のフォーマット

このステップでは、f-Strings 内で数値データをフォーマットする方法を学習します。これは、データを人間が読みやすい形式で提示するための強力な機能です。数千区切り文字の追加、浮動小数点数の丸め、および数値をパーセンテージとして表示する方法について説明します。

ファイルエクスプローラーからファイル step4.py を開いてください。

異なる数値フォーマット技術を練習するために、step4.py に次のコードを追加します。

## Adding thousands separator
a = 10000000
print(f"Number with separators: {a:,}")

## Rounding a float to 2 decimal places
b = 3.1415926
print(f"Rounded number: {b:.2f}")

## Showing a number as a percentage with 2 decimal places
c = 0.816562
print(f"As a percentage: {c:.2%}")

各フォーマット指定子は、波括弧内のコロン : の後に続きます。

  • :, は、数千区切り文字としてコンマを追加します。
  • :.2f は、数値を小数点以下 2 桁の浮動小数点数としてフォーマットします。
  • :.2% は、数値を 100 倍し、小数点以下 2 桁のパーセンテージとして表示します。

ファイルを保存し、ターミナルから実行します。

python3 step4.py

出力は次のようになります。

Number with separators: 10,000,000
Rounded number: 3.14
As a percentage: 81.66%

参考として、f-Strings で利用可能なその他の数値フォーマットオプションを示す表を以下に示します。

数値 フォーマット 出力 説明
3.1415926 {:.2f} 3.14 浮動小数点数を小数点以下 2 桁でフォーマット
1000000 {:,} 1,000,000 コンマ区切りでの数値フォーマット
0.35 {:.2%} 35.00% パーセンテージのフォーマット
1000000000 {:.2e} 1.00e+09 指数表記

Template 文字列の使用

このステップでは、Python の組み込みモジュール string からの Template 文字列について学習します。f-Strings ほど強力ではありませんが、ユーザーによって生成される可能性のある文字列テンプレートを扱う場合には、より安全な選択肢となります。その複雑さが低いため、str.format() のような方法を注意深く使用しない場合に発生し得るセキュリティリスクである、任意のコードの実行を防ぎます。

Template 文字列は、ドル記号 $ を使用してプレースホルダー(例:$name)を示します。

ファイルエクスプローラーからファイル step5.py を開いてください。

Template クラスをインポートし、テンプレートオブジェクトを作成し、次に substitute() メソッドを使用して値を挿入するために、step5.py に次のコードを追加します。

from string import Template

name = 'Elizabeth'

## Create a Template object
t = Template('Hey $name!')

## Use the substitute() method to replace the placeholder
result = t.substitute(name=name)
print(result)

substitute() メソッドは、キーがテンプレート内のプレースホルダー名と一致するキーワード引数を取ります。

ファイルを保存し、ターミナルから実行します。

python3 step5.py

出力には、置換された文字列が表示されます。

Hey Elizabeth!

まとめ

Python 文字列フォーマットの実験を完了されたことをお祝いします!

この実験では、Python における文字列フォーマットの主要な方法を探求しました。以下のことを学びました。

  • % 演算子: C スタイルの古いフォーマット方法であり、新しいコードでは推奨されなくなりました。
  • str.format() メソッド: {} プレースホルダーを使用する、より強力で柔軟な方法です。
  • f-Strings: Python 3.6 以降で推奨される、モダンで簡潔なアプローチであり、式を文字列に直接埋め込むことができます。
  • 数値のフォーマット: f-Strings 内でフォーマット指定子を使用して、区切り文字、精度、パーセンテージなど、数値の表示を制御する方法。
  • Template 文字列: 文字列置換のための、よりシンプルで安全なメカニズムであり、外部または信頼できないソースからのテンプレートを扱う場合に最適です。

各メソッドの長所と短所を理解することで、Python プログラミングの旅で遭遇するあらゆる文字列フォーマットタスクに対して、最も適切なツールを選択できるようになりました。