Pythonで文字列・数値をゼロ埋め(ゼロパディング)
Pythonで文字列str
や整数int
などをゼロ埋め(ゼロパディング)する方法について、サンプルコードとともに説明する。
右寄せゼロ埋め: zfill()
一番シンプルなのは文字列str
のzfill()
メソッドを使う方法。
引数に文字数を指定すると、元の文字列が右寄せされて残り(左側)がゼロで埋められた文字列を返す。
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