Pythonで数値を0埋めして文字列化するには、f文字列、formatメソッド、format関数、%演算子などの方法がある。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
* 本稿は2020年8月21日に公開された記事をPython 3.12.1で動作確認したものです(確認日:2024年2月1日)。
# 数値「12」を文字列「0012」に書式化
num = 12
# f文字列:Python 3.6以降
s = f'{num:04}' # 0埋めで4文字
print(s) # 0012
# formatメソッド:Python 2.6以降(3を含む)
# formatメソッドに渡した位置引数が{0}、{1}、……に渡される
s = '{0:04}'.format(num) # 第0引数:0埋めで4文字
print(s) # 0012
# format関数:Python 2.6以降(3を含む)
s = format(num, '04') # 0埋めで4文字
print(s) # 0012
# %演算子
s = '%04d' % num # 0埋めで4文字、10進整数
print(s) # 0012
以下ではこれらの方法について簡単に解説をする。
Python 3.6以降ではf文字列(フォーマット済み文字列)を使うと簡単に、数値や文字列の書式化を行える。f文字列は文字列を囲むシングルクオートやダブルクオートの前に「f」を置くことで作成できる。
f文字列内には波かっこ「{}」で囲まれた「置換フィールド」を記述して、そこに「{式:書式指定子}」という形式で、書式化する対象となる式(変数名など)と、それをどのように書式化するかを指定する(「:書式指定子」の前には「!r」「!s」「!a」という「変換フィールド」を記述できる。これは「書式指定子」を使った書式化の前に、式の値をrepr関数、str関数、ascii関数で文字列化することを指示するもの。ただし、本稿では説明は省略する)。
書式指定子としては例えば次のようなものを指定できる。詳細については「Python入門」の「文字列の書式指定」などを参照のこと。
上記例の「04」は上で強調書体とした「0埋めを意味する0」に続けて「最小幅」を指定したものと考えられる。f文字列(および次に取り上げるformatメソッド)においては、0埋めするにはこの指定を行うのが簡単だ。
f文字列で書式指定を行う例を幾つか示す。
num = 12
# 埋め文字を「_」に、左寄せ、最小幅は5
s = f'{num:_<5}'
print(s) # 12___
# 符号を常に表示、最小幅は4
s = f'{num:+4}'
print(s) # +12(符号の前を空白で埋めている)
# 符号を常に表示、符号の後を0埋め、最小幅は5
s = f'{num:+05}' # f'{num:0=+5}'と同じ
print(s) # +0012
# 置換フィールドに式を記述
x = 1
y = 2
s = f'{x:04} + {y:04} = {x+y:04}'
print(s) # 0001 + 0002 = 0003
Python 2.6以降(Python 3を含む)では、文字列のformatメソッドを使っても書式化が可能だ。formatメソッドは「'書式指定文字列'.format(埋め込む値)」という形式で呼び出す。書式指定文字列内には、f文字列と同様に波かっこ「{}」で囲んだ「置換フィールド」を記述する。
置換フィールドは「{置換フィールド名:書式指定子}」という形式で記述する。置換フィールド名としては、整数値または任意のキーワードを指定する。整数値を指定した場合、その置換フィールドはformatメソッドに渡された位置引数の値を順に参照していく(置換フィールド{0}は第0引数を、{1}は第1引数を、……のように)。キーワードを指定したときには、それらのフィールドはformatメソッドに渡されたキーワード引数の値を参照する。Python 2.7以降では置換フィールド名を省略すると、0から順番に整数値が割り当てられたものとして扱われる(f文字列と同様、「書式指定子」の前に「!r」「!s」「!a」という変換フィールドを記述できる)。
辞書のキー/値の組から書式化を行う場合には、formatメソッドの引数指定で辞書から値を取り出す方法、位置引数やキーワード引数として辞書を渡し置換フィールド内でその値を取り出す方法、辞書のキー/値を展開してformatメソッドに渡す方法がある。
以下に例を示す。
x = 12
y = 34
# 置換フィールド名を省略(Python 2.7以降)
s = 'x: {}, y:{}'.format(x, y) # 2つの{}は位置引数に指定したxとyを順に参照
print(s) # x: 12, y: 34
# 置換フィールドに整数値を指定
s = 'x: {1}, y: {0}'.format(y, x) # {0}は第0引数yの値を、{1}は第1引数xの値を参照
print(s) # x: 12, y: 34
# 置換フィールド名にキーワードを指定
s = 'x: {x}, y: {y}'.format(x=x, y=y) # {x}と{y}はキーワード引数xとyの値を参照
print(s) # x: 12, y: 34
d = {'x': 12, 'y': 34}
s = 'x: {}, y: {}'.format(d['x'], d['y']) # 辞書のキーを指定して個々の値を渡す
print(s) # x: 12, y: 34
s = 'x: {0[x]}, y: {0[y]}'.format(d) # 第0引数dの要素に「0[x]」「0[y]」としてアクセス
print(s) # x: 12, y: 34
s = 'x: {x}, y: {y}'.format(**d) # 辞書の要素を展開してformatメソッドに渡す
print(s) # x: 12, y: 34
なお、f文字列ではコロン「:」の前に式を記述できたが、formatメソッドではオブジェクトの属性アクセス、インデックス指定を行うことは可能だが、それ以外の式は書けないことには注意(上のコード例の下から2つ目のコードでは、辞書のキーを指定して、その値を取り出しているが、このときには文字列キーを囲むシングルクオート/ダブルクオートは省略している点に注目)。
書式指定子についてはf文字列と同様なものが指定できる。
Copyright© Digital Advantage Corp. All Rights Reserved.