Python 文字列のフォーマット
Python 3.6で導入されたF-Stringは、文字列をフォーマットするための推奨される方法となっています。
F-Strings
F-Stringを使用すると、文字列の特定の部分をフォーマットすることができます。
文字列をF-Stringとして指定するには、文字列リテラルの前に単純にfを置きます。以下のようにします:
txt = f"The price is 49 dollars"
print(txt)
プレースホルダと修飾子
F-Stringを使用して値をフォーマットするには、プレースホルダ {} を追加します。プレースホルダには変数、演算、関数、および修飾子を含めることができます。
price = 59
txt = f"The price is {price} dollars"
print(txt)
プレースホルダには修飾子も含めることができます。修飾子はコロン : の後に.2fのような形式で指定され、小数点以下2桁の固定小数点数を意味します。
price = 59
txt = f"The price is {price:.2f} dollars"
print(txt)
変数を使わずに直接値をフォーマットすることもできます:
txt = f"The price is {95:.2f} dollars"
print(txt)
F-Stringでの操作
プレースホルダの中でPythonの演算を行うことができます。
txt = f"The price is {20 * 59} dollars"
print(txt)
変数に対して演算を行うことも可能です。
price = 59
tax = 0.25
txt = f"The price is {price + (price * tax)} dollars"
print(txt)
プレースホルダ内でif…else文を実行することもできます。
price = 49
txt = f"It is very {'Expensive' if price>50 else 'Cheap'}"
print(txt)
F-Stringで関数を実行する
プレースホルダ内で関数を実行することができます。例えば、文字列メソッドupper()を使用して値を大文字に変換することができます。
fruit = "apples"
txt = f"I love {fruit.upper()}"
print(txt)
組み込みのPythonメソッドでなくても、独自の関数を作成して使用することができます。
def myconverter(x):
return x * 0.3048
txt = f"The plane is flying at a {myconverter(30000)} meter altitude"
print(txt)
その他の修飾子
この章の冒頭で、.2f修飾子を使用して数値を固定小数点数で2桁表示する方法を説明しました。
修飾子 | 説明 |
---|---|
:< | 結果を左寄せに配置します(利用可能なスペース内で) |
:> | 結果を右寄せに配置します(利用可能なスペース内で) |
:^ | 結果を中央寄せに配置します(利用可能なスペース内で) |
:= | 符号を左端に配置します |
:+ | 結果が正または負の場合にプラス記号を使用します |
:- | 負の値の場合にマイナス記号を使用します |
: | 正の数の前に余分なスペースを挿入します(負の数の前にはマイナス記号を挿入します) |
:, | 数値を千単位でカンマ区切りにします |
:_ | 数値を千単位でアンダースコア区切りにします |
:b | 2進数形式 |
:c | 値を対応するUnicode文字に変換します |
:d | 10進数形式 |
:e | 小数形式、小文字e |
:E | 小数形式、大文字E |
:f | 固定小数点数形式 |
:F | 固定小数点数形式、大文字形式(infおよびnanをINFおよびNANとして表示します) |
:g | 一般的な形式 |
:G | 一般的な形式(指数表記には大文字Eを使用します) |
: |
8進数形式 |
: |
16進数形式、小文字 |
:X | 16進数形式、大文字 |
:n | 数値形式 |
:% | パーセント形式 |
format()メソッド
Python 3.6以前では、文字列をフォーマットするためにformat()メソッドを使用していました。
format()メソッドは今でも使用することができますが、F-Stringの方が速く、文字列をフォーマットする推奨される方法となっています。
このページの次の例では、format()メソッドを使用して文字列をどのようにフォーマットするかを示します。
format()メソッドもプレースホルダとしてカーリーブラケット {} を使用しますが、構文は若干異なります:
price = 49
txt = "The price is {} dollars"
print(txt.format(price))
値を変換する方法を指定するために、カーリーブラケット内にパラメータを追加することができます:
txt = "The price is {:.2f} dollars"
複数の値
複数の値を使用したい場合は、format()メソッドに値を追加するだけです:
print(txt.format(price, itemno, count))
そして、追加のプレースホルダを指定します:
quantity = 3
itemno = 567
price = 49
myorder = "I want {} pieces of item number {} for {:.2f} dollars."
print(myorder.format(quantity, itemno, price))
インデックス番号
正しいプレースホルダに値を配置するために、インデックス番号(カーリーブラケット {0} 内の数字)を使用することができます:
quantity = 3
itemno = 567
price = 49
myorder = "I want {0} pieces of item number {1} for {2:.2f} dollars."
print(myorder.format(quantity, itemno, price))
同じ値を複数回参照する場合は、インデックス番号を使用します:
age = 36
name = "John"
txt = "His name is {1}. {1} is {0} years old."
print(txt.format(age, name))
名前付きインデックス
カーリーブラケット {carname} 内に名前を入力して名前付きインデックスを使用することもできます。ただし、パラメータ値を渡すときに名前を使用する必要があります txt.format(carname = “Ford”):
myorder = "I have a {carname}, it is a {model}."
print(myorder.format(carname = "Ford", model = "Mustang"))