前提条件
本記事では、数値型を対象としています。文字列型の場合は、数値型に型変換してから format関数、f-string を使用します。# 文字列型の数値
str_value = '12345'
# int型に変換
int_value = int(str_value)
# float型に変換
float_value = float(str_value)
文字列型のままゼロパディングするには、次の記事を参照してください。
整数型(int)の場合
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'
-
f-string(フォーマット済み文字列リテラル)を使用するには、Python3.6以上のバージョンが必要です。
バージョンを確認するには次の記事を参照してください。
浮動小数点数(float)の場合
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'
参考資料
検証環境
- Python 3.11.3 (tags/v3.11.3:f3909b8, Apr 4 2023, 23:49:59) [MSC v.1934 64 bit (AMD64)] on win32
- Microsoft Windows 10 Enterprise Version 22H2 OS Build 19045.3570 Experience: Windows Feature Experience Pack 1000.19052.1000.0