ストップウォッチやタイマーなど、数字を決まった桁数で表示させたい時に必要となるのが、指定した桁数に満たない部分をゼロで埋めるゼロパディング(ゼロ埋め)です。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