Pythonでゼロパディング(ゼロ埋め)する方法

ストップウォッチやタイマーなど、数字を決まった桁数で表示させたい時に必要となるのが、指定した桁数に満たない部分をゼロで埋めるゼロパディング(ゼロ埋め)です。Pythonでゼロパディングするにはいくつかの方法があります。

目次

zfill:シンプルな右寄せゼロパディング

最もシンプルなのが文字列メソッド zfill を使う方法です。

次のように、引数に桁数を指定するだけで元の文字列が右寄せされ、左側がゼロパディングされた文字列を返します。

s = "123"
print(s.zfill(6))
000123

文字列メソッドなので、元のデータ型が数値型の場合は文字列型に変換しなければ使えません。

例えば次のi変数をゼロパディングしたい場合は、str関数で文字列型に変換してからzfillメソッドを使います。

i = 123
s = str(i)
print(s.zfill(6))
000123

符号(+, -)が先頭についている場合、最初に符号が付いてその後からゼロパディングされます。

ただし符号も文字数にカウントされる点には留意が必要です。

s = "-123"
print(s.zfill(6))
-00123

rjust, ljust, center:右寄せ、左寄せ、中央寄せ

文字列メソッドzfillは簡単ですが右寄せに限定されます。右寄せだけでなく左寄せや中央寄せでゼロパディングしたい時は文字列メソッドrjust, ljust, center を使います。

次のように第一引数に桁数、第ニ引数に “0” を指定します。

s = "123"
print(s.rjust(7, "0"))
print(s.ljust(7, "0"))
print(s.center(7, "0"))
0000123
1230000
0012300

第ニ引数に指定した文字列で埋めるので、0以外にも任意の数字で埋めることができます。

また、符号(+, -)は考慮されません。(他の文字列と同様に扱われるため、指定によっては符号が途中に入ることもあり、符号も1桁として扱われます。)

例えば下の例では実行結果は次のようになります。

s = "-123"
print(s.rjust(7, "0"))
print(s.ljust(7, "0"))
print(s.center(7, "0"))
000-123
-123000
00-1230

これらも文字列メソッドなので、元のデータ型が数値型の場合はstr関数で文字列型に変換してから呼び出しましょう。

format:任意の書式変換

最も自由度が高いのがformat関数、または文字列メソッドformatを使った方法です。

右寄せ、左寄せ、中央寄せいずれも対応できるほか、数値型に対しても使用できます。

文字列型に対して使用する場合は次のように記述します。

s = "123"

print(format(s, "0>7")) # format関数を使って右寄せゼロパディング
print(format(s, "0<7")) # format関数を使って左寄せゼロパディング
print(format(s, "0^7")) # format関数を使って中央寄せゼロパディング

print("{:0>7}".format(s)) # 文字列メソッドformatを使って右寄せゼロパディング
print("{:0<7}".format(s)) # 文字列メソッドformatを使って左寄せゼロパディング
print("{:0^7}".format(s)) # 文字列メソッドformatを使って中央寄せゼロパディング
0000123
1230000
0012300
0000123
1230000
0012300

文字列型に対して使用した場合、符号(+, -)は考慮されません。(他の文字列と同様に扱われるため、指定によっては符号が途中に入ることもあり、符号も1桁として扱われます。)

s = "-123"

print(format(s, "0>7")) # format関数を使って右寄せゼロパディング
print(format(s, "0<7")) # format関数を使って左寄せゼロパディング
print(format(s, "0^7")) # format関数を使って中央寄せゼロパディング

print("{:0>7}".format(s)) # 文字列メソッドformatを使って右寄せゼロパディング
print("{:0<7}".format(s)) # 文字列メソッドformatを使って左寄せゼロパディング
print("{:0^7}".format(s)) # 文字列メソッドformatを使って中央寄せゼロパディング
000-123
-123000
0-12300
000-123
-123000
0-12300

数値に対して使用する場合は次のように記述することで右寄せでゼロパディングできます。

i = -123
print(format(i, "07")) # format関数を使って右寄せゼロパディング
print("{:07}".format(i)) # 文字列メソッドformatを使って右寄せゼロパディング
-000123
-000123

このように数値に対しては符号(+, -)が考慮されます。

また、format関数およびformatメソッドでは次のように、16進数に変換してゼロ埋めといった処理をすることもできます。

i = 123
print(format(i, "07x")) # format関数を使って16進数に変換してゼロパディング
print("{:07x}".format(i)) # 文字列メソッドformatを使って16進数に変換してゼロパディング
000007b
000007b
このエントリーをはてなブックマークに追加

コメントを残す

頂いたコメントは一読した後表示させて頂いております。
反映まで数日かかる場合もございますがご了承下さい。