Pythonで文字列をフォーマットする方法はいくつかありますが、そのうちの1つが %
演算子を使って行うもので、これは文字列フォーマット(または補間)演算子として知られています。
この記事では、この演算子を使って、テンプレート文字列とデータを含む変数で文字列を構成する方法を紹介します。
% 演算子
このテキストを扱う方法は、Pythonの初期から搭載されており、Cプログラミング言語に由来するため、Cスタイルフォーマットとしても知られています。
別の表現としては、単純な位置指定書式です。
演算子 %
はPythonインタープリタに、演算子に続くタプルで囲まれた与えられた変数のセットを使って文字列をフォーマットするように指示します。
非常に単純な例として、次のようなものがあります。
'%s is smaller than %s' % ('one', 'two')
Python インタープリタは、文字列の中で最初に現れる %s
を与えられた文字列 “one” に、2番目に現れる %s
を文字列 “two” に置き換えます。
これらの %s
文字列は、実際には “template” 文字列のプレースホルダーであり、文字列がそこに配置されることを意味しています。
最初の例として、Python REPLを使って、文字列と浮動小数点数の値を表示する方法を紹介します。
>>> print("Mr. %s, the total is %.2f." % ("Jekyll", 15.53))
'Mr. Jekyll, the total is 15.33.'
sが文字列のプレースホルダーであるように、
%fは浮動小数点数のプレースホルダーです。
fの前の”.2 “は、小数点の後に何桁まで表示させたいかを示しています。
これらは、可能なことのほんの2つの例であり、もっと多くの種類のプレースホルダーがサポートされています。
ここでは、プレースホルダーの種類を詳しく説明します。
%c
このプレースホルダーは1文字を表します。
>>> print("The character after %c is %c." % ("B", "C"))
The character after B is C.
ここに1文字以上の変数を指定すると、例外が発生します。
%s
このプレースホルダは、フォーマットする前に str()
による文字列変換を使用します。
したがって、str()
によって文字列に変換できるすべての値をここで使用することができます。
>>> place = "New York"
>>> print("Welcome to %s!" % place)
Welcome to New York!
ここでは、文字列のフォーマットで使用する要素は1つだけなので、前の例のように要素をタプルで囲む必要はありません。
%i と %d
これらのプラクティスは、符号付き10進整数を表します。
>>> year = 2019
>>> print("%i will be a perfect year." % year)
2019 will be a perfect year.
このプレースホルダーは10進数を想定しているので、代わりに浮動小数点値が指定された場合は10進数に変換されます。
%u
このプレースホルダーは、符号なし10進整数を表します。
%o
このプレースホルダーは8進数の整数を表します。
>>> number = 15
>>> print("%i in octal is %o" % (number, number))
15 in octal is 17
%x
16進数の整数を小文字(a-f)で表します。
>>> number = 15
>>> print("%i in hex is %02x" % (number, number))
15 in hex is 0f
プレースホルダーに “02” というプレフィックスを使うことで、Pythonに2文字の16進文字列を表示するよう指示しています。
%X
16進数の整数を大文字(A~F)で表します。
>>> number = 15
>>> print("%i in hex is %04X" % (number, number))
15 in hex is 000F
そして前の例のように、プレースホルダーに「04」という接頭語を使うことで、Pythonに4文字の16進文字列を表示するよう指示しています。
%e
小文字の “e “で指数表記を表す。
%E
大文字の “e “で指数表記を表します。
%f
浮動小数点の実数を表します。
>>> price = 15.95
>>> print("the price is %.2f" % price)
the price is 15.95
%g
fと
%e` の短縮版です。
%G
fと
%E` の短縮版です。
上に示したプレースホルダーを使えば、テンプレートでデータ型を指定して文字列をフォーマットすることができます。
しかし、補間演算子の機能はこれだけではありません。
次のサブセクションでは、 %
演算子を使って文字列を空白で埋める方法を見ていきましょう。
出力の位置合わせ
これまで、単純なプレースホルダーを指定してテキスト文字列をフォーマットする方法だけを示してきました。
追加の数値の助けを借りて、出力文字列の変数の両側に確保される合計スペースを定義することができます。
例えば、%10s
という値は10文字を確保し、余分なスペースはプレースホルダーの左側に、%-10s
という値は余分なスペースをプレースホルダーの右側に配置します。
パディングの1文字はスペースであり、変更することはできません。
>>> place = "London"
>>> print ("%10s is not a place in France" % place) # Pad to the left
London is not a place in France
>>> print ("%-10s is not a place in France" % place) # Pad to the right
London is not a place in France
数字を扱う場合も同じように動作します。
>>> print ("The postcode is %10d." % 25000) # Padding on the left side
The postcode is 25000.
>>> print ("The postcode is %-10d." % 25000) # Padding on the right side
The postcode is 25000 .
文字列の切り捨てと数値の丸めは、パディングの対極にあるものです。
ここに隠されている罠についてもっと知るには、Rounding Numbers in Pythonを見てください。
結論
この記事では、補間(別名フォーマット)演算子が、データ型、浮動小数点精度、さらにスペーシング/パディングを指定できる、文字列のフォーマットに関する強力な方法であることを確認しました。