Featured image of post 【小技】Python3で数字を0埋めした文字列に変換する方法(動的も可能)【瞬殺】

【小技】Python3で数字を0埋めした文字列に変換する方法(動的も可能)【瞬殺】

1508文字

0埋め文字列を作りたい

業務システムやAPIを作成している方であれば、数値を任意の桁に0埋めした値を生成したい、というケースが少なからずあると思います。

Pythonでは、その辺りもとても簡単に実装する事出来ますので、 備忘録がてらご紹介致します。

手順

前提

筆者のPythonの環境は以下となっております。

バージョン確認
python --version
Python 3.6.1

0埋めする桁数が決まっている場合

0埋めを行いたい桁数が仕様としてあらかじめ決まっている場合は、format関数を使う事で実現可能です。

{0:00d}の部分を0埋めした桁数だけ数値を変えてください。

桁数フォーマット
2桁{0:02d}
3桁{0:03d}
4桁{0:04d}

確認

以下のファイルを作成し、

script.py
one = 1
ten = 10
oneHundred = 100

print('0桁0詰め:{0:00d}'.format(one))
print('0桁0詰め:{0:00d}'.format(ten))
print('0桁0詰め:{0:00d}'.format(oneHundred))
print("==================================")
print('1桁0詰め:{0:01d}'.format(one))
print('1桁0詰め:{0:01d}'.format(ten))
print('1桁0詰め:{0:01d}'.format(oneHundred))
print("==================================")
print('2桁0詰め:{0:02d}'.format(one))
print('2桁0詰め:{0:02d}'.format(ten))
print('2桁0詰め:{0:02d}'.format(oneHundred))
print("==================================")
print('3桁0詰め:{0:03d}'.format(one))
print('3桁0詰め:{0:03d}'.format(ten))
print('3桁0詰め:{0:03d}'.format(oneHundred ))
print("==================================")
print('4桁0詰め:{0:04d}'.format(one))
print('4桁0詰め:{0:04d}'.format(ten))
print('4桁0詰め:{0:04d}'.format(oneHundred ))
print("==================================")

実行すると以下のようなログが出力されます。
※0桁及び1桁指定の時にどうなるかも確認したかったので0~4桁指定にしています

実行ログ
$ python script.py
0桁0詰め:1
0桁0詰め:10
0桁0詰め:100
==================================
1桁0詰め:1
1桁0詰め:10
1桁0詰め:100
==================================
2桁0詰め:01
2桁0詰め:10
2桁0詰め:100
==================================
3桁0詰め:001
3桁0詰め:010
3桁0詰め:100
==================================
4桁0詰め:0001
4桁0詰め:0010
4桁0詰め:0100
==================================

エラーが起きる事無く正しく0埋めが行われていますね♪

0埋めをする桁数を動的に指定したい場合

複雑な仕様により、0埋めの桁数を動的に指定したい場合は、zfill関数を使用します。

先ほどのformat関数内の{0:00d}の部分には変数を埋め込む事が出来ないので動的に指定する事が出来ません。

確認

以下のファイルを作成し、

script.py
one = 1
ten = 10
oneHundred = 100

for index in range(5):
    print( str(index) + '桁0詰め:' + str(one).zfill(index))
    print( str(index) + '桁0詰め:' + str(ten).zfill(index))
    print( str(index) + '桁0詰め:' + str(oneHundred).zfill(index))
    print("==================================")

実行すると以下のようなログが出力されます。
※0桁及び1桁指定の時にどうなるかも確認したかったので0~4桁指定にしています

実行ログ
python script.py
0桁0詰め:1
0桁0詰め:10
0桁0詰め:100
==================================
1桁0詰め:1
1桁0詰め:10
1桁0詰め:100
==================================
2桁0詰め:01
2桁0詰め:10
2桁0詰め:100
==================================
3桁0詰め:001
3桁0詰め:010
3桁0詰め:100
==================================
4桁0詰め:0001
4桁0詰め:0010
4桁0詰め:0100
==================================

こちらもエラーが起きる事無く正しく0埋めされましたね♪