Python - 文字列の数値をゼロパディング(ゼロ埋め)

文字列に格納された数値をゼロ埋めして桁数を揃えるには zfill関数、rjust関数、format関数、f-string などを使用します。

前提条件

本記事では 文字列型(str) を対象としています。数値型(int、float) の場合は 文字列型 に型変換するか、次の記事を参照してください。 数値型 を 文字列型 に型変換
# int型
int_value = 12345

# str型に型変換
str_value = str(int_value)

ゼロパディング(符号あり)

次のサンプルコードは 文字列 '+123' と '-123' を 5桁でゼロ埋めしています。 おすすめは zfill関数 で、符号を考慮してゼロ埋めが行われます。
str_p = '+123'
str_m = '-123'

# zfillメソッド
print(str_p.zfill(5))          # -> '+0123'
print(str_m.zfill(5))          # -> '-0123'

# rjustメソッド
print(str_p.rjust(5, '0'))     # -> '0+123'
print(str_m.rjust(5, '0'))     # -> '0-123'

# formatメソッド
print('{:0>5}'.format(str_p))  # -> '0+123'
print('{:0>5}'.format(str_m))  # -> '0-123'

# f-string
print(f'{str_p:0>5}')          # -> '0+123'
print(f'{str_m:0>5}')          # -> '0-123'

ゼロパディング(符号無し)

符号が無い場合、結果は同じです。
str_value = '123'

# zfillメソッド
print(str_value.zfill(5))          # -> '00123'

# rjustメソッド
print(str_value.rjust(5, '0'))     # -> '00123'

# formatメソッド
print('{:0>5}'.format(str_value))  # -> '00123'

# f-string
print(f'{str_value:0>5}')          # -> '00123'

数値型を渡すと?

zfillメソッド と rjustメソッド は テキストシーケンス型(str型) のメソッドです。 整数型(int型)のオブジェクトにはzfillとrjustメソッドは存在しないため、エラーが発生します。
num = 123

# zfillメソッド
print(num.zfill(5))
# -> AttributeError: 'int' object has no attribute 'zfill'

# rjustメソッド
print(num.rjust(5, '0'))
# -> AttributeError: 'int' object has no attribute 'rjust'

# formatメソッド
print('{:0>5}'.format(num))     # -> '00123'

# f-string
print(f'{num:0>5}')             # -> '00123'

None を渡すと?

いづれもエラーが発生します。変数に None が代入される可能性がある場合、空文字列に変換するなどの対策が必要です。
str_value = None

# zfillメソッド
print(str_value.zfill(5))
# -> AttributeError: 'NoneType' object has no attribute 'zfill'

# rjustメソッド
print(str_value.rjust(5, '0'))
# -> AttributeError: 'NoneType' object has no attribute 'rjust'

# formatメソッド
print('{:0>5}'.format(str_value))
# -> TypeError: unsupported format string passed to NoneType.__format__

# f-string
print(f'{str_value:0>5}')
# -> TypeError: unsupported format string passed to NoneType.__format__

None を考慮する場合

str_value = None

# None のとき、空文字列に変換
if str_value is None:
    str_value = ''

print(str_value.zfill(5))  # -> '00000'

参考資料

検証環境