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

Modified: | Tags: Python, 文字列

Pythonで文字列strや整数intなどをゼロ埋め(ゼロパディング)する方法について、サンプルコードとともに説明する。

右寄せゼロ埋め: zfill()

一番シンプルなのは文字列strzfill()メソッドを使う方法。

引数に文字数を指定すると、元の文字列が右寄せされて残り(左側)がゼロで埋められた文字列を返す。

s = '1234'

print(s.zfill(8))
# 00001234

print(type(s.zfill(8)))
# <class 'str'>

元の文字列の文字数よりも少ない値を指定した場合は元の文字列のまま変化なし。

print(s.zfill(3))
# 1234

符号(-, +)が先頭についている場合、符号のあとからゼロで埋められる。符号も文字数にカウントされるので注意。

s = '-1234'
print(s.zfill(8))
# -0001234

s = '+1234'
print(s.zfill(8))
# +0001234

元の文字列は数字でなくても同様に処理される。

s = 'abcd'
print(s.zfill(8))
# 0000abcd

zfill()は文字列strのメソッドなので、整数intなどほかの型のオブジェクトからは呼び出せない。整数をゼロ埋めした文字列を生成したい場合は、str()で文字列に変換してからzfill()を呼ぶ。

i = 1234

print(type(i))
# <class 'int'>

# print(i.zfill(8))
# AttributeError: 'int' object has no attribute 'zfill'

print(str(i).zfill(8))
# 00001234

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

右寄せだけでなく、中央寄せ、左寄せでゼロ埋めしたい場合は、文字列メソッドcenter(), ljust()を使う。

ここでは右寄せのrjust()も合わせて例を示す。

いずれのメソッドも、第一引数に文字数、第二引数にはゼロ埋めの場合'0'を指定する。

s = '1234'

print(s.rjust(8, '0'))
# 00001234

print(s.center(8, '0'))
# 00123400

print(s.ljust(8, '0'))
# 12340000

符号(-, +)は考慮されないので注意。

s = '-1234'

print(s.rjust(8, '0'))
# 000-1234

print(s.center(8, '0'))
# 0-123400

print(s.ljust(8, '0'))
# -1234000

これらも文字列strのメソッドなので、数値などに適用するにはstr()で文字列に変換してから呼び出す。

任意の書式変換: format(), f文字列

組み込み関数format()または文字列メソッドformat()でゼロ埋めを含む様々な書式変換ができる。文字列メソッドformat()では置換フィールド{}を使って文字列中に値を挿入できる。

ここでは、文字列メソッドformat()で右寄せゼロ埋めする例を示す。そのほかの例や詳しい使い方は以下の記事を参照。

文字列に対しては0>[文字数]で書式を指定する。符号は考慮されない。

s = '1234'

print('Zero Padding: {:0>8}'.format(s))
# Zero Padding: 00001234

s = '-1234'

print('Zero Padding: {:0>8}'.format(s))
# Zero Padding: 000-1234

後述のように数値に対しては符号が考慮されるので、符号を考慮したい場合はint()で数値に変換する。その場合は0[文字数]で書式を指定する。

s = '-1234'

print('Zero Padding: {:08}'.format(int(s)))
# Zero Padding: -0001234

数値に対しては0[文字数]とする。符号も考慮される。16進数に変換してゼロ埋め、というような処理もできる。詳細は上記の関連記事参照。

i = 255

print('Zero Padding: {:08}'.format(i))
# Zero Padding: 00000255

print('Zero Padding: {:08x}'.format(i))
# Zero Padding: 000000ff

i = -1234

print('Zero Padding: {:08}'.format(i))
# Zero Padding: -0001234

Python3.6からはf文字列(f-strings)も使用可能。より簡潔に書ける。

print(f'Zero Padding: {i:08}')
# Zero Padding: -0001234

文字列に対するパーセント演算子

文字列に対してパーセント演算子を使うことで、書式変換した文字列を取得できる。

なお、公式ではf文字列やformat()が推奨されている。

注釈: ここで解説されているフォーマット操作には、(タプルや辞書を正しく表示するのに失敗するなどの) よくある多くの問題を引き起こす、様々な欠陥が出現します。 新しい フォーマット済み文字列リテラル や str.format() インターフェースや テンプレート文字列 が、これらの問題を回避する助けになるでしょう。 これらの代替手段には、それ自身に、トレードオフや、簡潔さ、柔軟さ、拡張性といった利点があります。 組み込み型 - printf 形式の文字列書式化 — Python 3.11.3 ドキュメント

整数に対しては%0[文字数]dでゼロ埋めが可能。符号も考慮される。

i = 1234

print('Zero Padding: %08d' % i)
# Zero Padding: 00001234

i = -1234

print('Zero Padding: %08d' % i)
# Zero Padding: -0001234

文字列に対しては空白(スペース)で埋められる。ゼロで埋めたい場合はint()で整数に変換して処理する。

s = '1234'

print('Zero Padding: %08s' % s)
# Zero Padding:     1234

print('Zero Padding: %08d' % int(s))
# Zero Padding: 00001234

関連カテゴリー

関連記事