Pythonにおいて数値を文字列に変換する際に桁数を指定する方法について解説します。
桁数を指定することで整形された見栄えの良い文字列を生成することができます。
この記事では組み込み関数format()および、文字列メソッドstr.format()を使用して、数値を指定した桁数の文字列に変換する方法を紹介します。
format関数で桁数指定し変換する
Pythonでは組み込み関数format()が提供されており、これを使用することで数値を文字列に変換できます。
format()関数は指定した書式に従って文字列を生成します。
基本の使い方
i = 255
formatted_i = format(i, '#04x')
print(formatted_i)
print(type(formatted_i))
# Output:
# 0xff
# <class 'str'>
この例では、format()関数を使用して整数iを16進数の文字列に変換しています。
‘#04x’は書式指定文字列で、#は16進数の接頭辞を意味し、
04は最低桁数が4桁で、足りない桁はゼロで埋めることを指定しています。
文字列メソッド str.format() との比較
文字列オブジェクトにはformat()メソッドも存在し、同様の機能を提供しています。
s = 'abc'
formatted_s = '{:*^10}'.format(s)
print(formatted_s)
# Output:
# ***abc****
この例では文字列’abc’を中央寄せで、全体の幅が10桁となるように変換しています。
‘{:*^10}’の書式指定文字列では、*が埋める文字、^が中央寄せを表しています。
置換フィールドに対する引数の指定
順番通りに引数を指定(デフォルト)
result = '{}-{}-{}'.format(255, 'abc', 1.23)
# Output: 255-abc-1.23
この例では、{}-{}といった置換フィールドが順番に引数に置き換えられています。
引数の数が足りないとエラーになります。
整数値に対して位置引数を指定
result = '{0}-{1}-{0}'.format(255, 'abc')
# Output: 255-abc-255
{0}, {1}などのように整数値を指定すると、引数の順番に応じて出力されます。
同じ番号を繰り返し使うこともできます。
任意の名前に対してキーワード引数を指定
result = '{name} is {age} years old.'.format(name='Alice', age=20)
# Output: Alice is 20 years old.
{name}, {age}のように任意の名前を指定し、format()にキーワード引数として指定することも可能です。
リスト、辞書を引数に指定
l = ['one', 'two', 'three']
result_list = '{0[0]}-{0[1]}-{0[2]}'.format(l)
# Output: one-two-three
d1 = {'name': 'Alice', 'age': 20}
d2 = {'name': 'Bob', 'age': 30}
result_dict = '{0[name]} is {0日付未入力} years old.\n{1[name]} is {1日付未入力} years old.'.format(d1, d2)
# Output:
# Alice is 20 years old.
# Bob is 30 years old.
リストや辞書を引数として指定することも可能です。
リストの場合は添字、辞書の場合はキーを指定して取り出すことができます。
数値を文字列へ書式指定で変換する
書式指定文字列では、{}で囲まれた置換フィールド内に書式指定が記述されます。
基本的な構文は{[引数の位置や名前]:[フォーマット指定子]}です。
フォーマット指定子の例
# 整数
i = 42
formatted_i = 'Binary: {:b}, Octal: {:o}, Decimal: {:d}, Hexadecimal: {:x}'.format(i, i, i, i)
# Output: Binary: 101010, Octal: 52, Decimal: 42, Hexadecimal: 2a
# 浮動小数点数
f = 3.14159
formatted_f = 'Exponential: {:e}, Fixed-point: {:.2f}, Percentage: {:.2%}'.format(f, f, f)
# Output: Exponential: 3.141590e+00, Fixed-point: 3.14, Percentage: 314.16%
これらの例では、整数や浮動小数点数に対して異なるフォーマット指定子が使用されています。
これによりバイナリや16進数、指数表記、小数点以下2桁までの浮動小数点数、パーセンテージ表記などが可能です。
幅、精度、詳細指定
# 幅と精度の指定
value = 123.456789
formatted_value = 'Width: {:8}, Precision: {:.3f}'.format(value, value)
# Output: Width: 123.456789, Precision: 123.457
# 詳細指定
number = 42
formatted_number = 'Binary: {:b}, With plus: {:+d}, Padded: {:0>5}'.format(number, number, number)
# Output: Binary: 101010, With plus: +42, Padded: 00042
{:8}や{:.3f}のように幅や精度を指定することも可能です。
また、{:+d}や{:0>5}のように詳細な指定も行えます。
これにより、出力の幅を揃えたり符号を含めたり、ゼロでパディングすることができます。
f文字列(フォーマット済み文字列リテラル)
Python 3.6以降では、f文字列(フォーマット済み文字列リテラル)を使用することもできます。
これは文字列の先頭にfまたはFを付け、中括弧内に変数や式を直接埋め込む方法です。
基本の使い方
name = 'Alice'
age = 30
formatted_string = f'My name is {name} and I am {age} years old.'
# Output: My name is Alice and I am 30 years old.
この例では、変数nameとageを直接文字列に埋め込んでいます。
f文字列を使用すると、文字列内で変数や式を評価して埋め込むことができます。
書式指定子の使用
pi = 3.14159
formatted_number = f'Value of pi: {pi:.2f}'
# Output: Value of pi: 3.14
f文字列でも同様に書式指定子を使用することができます。
例えば、:0>5のように幅や詳細な指定を行うことができます。
まとめ
Pythonではformat()関数やf文字列を使用して、数値を文字列に変換する際に様々な書式指定を行うことができます。
これにより、整数や浮動小数点数の基数変換、桁揃え、小数点以下の制御、パーセンテージ表記などが柔軟に行えます。
使いやすい書式指定を選択して、目的に合った見栄えの良い文字列を生成しましょう。