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

数値(int型、float型)をゼロ埋めして桁数を揃えるには format関数、f-string(フォーマット済み文字列リテラル) を使用します。

前提条件

本記事では、数値型を対象としています。文字列型の場合は、数値型に型変換してから format関数、f-string を使用します。
# 文字列型の数値
str_value = '12345'

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

# float型に変換
float_value = float(str_value)

文字列型のままゼロパディングするには、次の記事を参照してください。

整数型(int)の場合

次のサンプルコードは、format関数 と f-string(フォーマット済み文字列リテラル) を使用し、8桁に ゼロパディングしています。コード中の 8d を、目的の桁数に置き換えて使用して下さい。

format関数 を使用

num_p = 12345
num_m = -12345

# プラス符号の箇所もゼロ
print('{:0=8d}'.format(num_p))   # -> '00012345'
print('{:0=8d}'.format(num_m))   # -> '-0012345'

# プラス符号の箇所はスペース
print('{:0= 8d}'.format(num_p))  # -> ' 0012345'
print('{:0= 8d}'.format(num_m))  # -> '-0012345'

# プラス符号を表示
print('{:0=+8d}'.format(num_p))  # -> '+0000123'
print('{:0=+8d}'.format(num_m))  # -> '-0012345'

f-string(フォーマット済み文字列リテラル) を使用

num_p = 12345
num_m = -12345

# プラス符号の箇所もゼロ
print(f'{num_p:0=8d}')   # -> '00012345'
print(f'{num_m:0=8d}')   # -> '-0012345'

# プラス符号の箇所はスペース
print(f'{num_p:0= 8d}')  # -> ' 0012345'
print(f'{num_m:0= 8d}')  # -> '-0012345'

# プラス符号を表示
print(f'{num_p:0=+8d}')  # -> '+0000123'
print(f'{num_m:0=+8d}')  # -> '-0012345'

浮動小数点数(float)の場合

次のサンプルコードは 全体10桁、少数部3桁 に ゼロパディングしています。コード中の 10.3f を、目的の桁数に置き換えて使用して下さい。

format関数 を使用

num_p = 123.45
num_m = -123.45

# プラス符号の箇所もゼロ
print('{:0=10.3f}'.format(num_p))   # -> '000123.450'
print('{:0=10.3f}'.format(num_m))   # -> '-00123.450'

# プラス符号の箇所はスペース
print('{:0= 10.3f}'.format(num_p))  # -> ' 00123.450'
print('{:0= 10.3f}'.format(num_m))  # -> '-00123.450'

# プラス符号を表示
print('{:0=+10.3f}'.format(num_p))  # -> '+00123.450'
print('{:0=+10.3f}'.format(num_m))  # -> '-00123.450'

f-string(フォーマット済み文字列リテラル) を使用

num_p = 123.45
num_m = -123.45

# プラス符号の箇所もゼロ
print(f'{num_p:0=10.3f}')   # -> '000123.450'
print(f'{num_m:0=10.3f}')   # -> '-00123.450'

# プラス符号の箇所はスペース
print(f'{num_p:0= 10.3f}')  # -> ' 00123.450'
print(f'{num_m:0= 10.3f}')  # -> '-00123.450'

# プラス符号を表示
print(f'{num_p:0=+10.3f}')  # -> '+00123.450'
print(f'{num_m:0=+10.3f}')  # -> '-00123.450'

None を渡すと?

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

# format関数
print('{:0=8d}'.format(num_p))
# -> TypeError: unsupported format string passed to NoneType.__format__

# f-string
print(f'{num_p:0=8d}')
# -> TypeError: unsupported format string passed to NoneType.__format__

None を考慮する場合

num_p = None

# None のとき、ゼロ に変換
if num_p is None:
    num_p = 0

print('{:0=8d}'.format(num_p))  # -> '00000000'

参考資料

検証環境