ゼロ埋め(ゼロパディング)
前回、Pythonでリスト内の全要素を型変換をする4つの方法(for文、リスト内包表記、numpy)で処理時間の比較をしてみました。
今回は文字列や数値をゼロ埋め(ゼロパディング)する方法を勉強していきます。
このゼロ埋めですが、例えば大量のファイルを作成する際にファイル名を数値で付けることがあることでしょう。
その際に「1.txt、2.txt、3.txt、4.txt、5.txt…」とすると、ファイルの順番が「1.txt、10.txt、11.txt…」というように1が前についているものが先に並んでしまったりします。
そうならないように「001.txt、002.txt、003.txt…」のように十分な桁数分0で埋めてしまうことによりファイルの順番が意図しない順番にならないように防ぐことができます。
また見栄え的にもよくなります。
そんな感じで使用頻度は高くないかもしれませんが、なかなか便利な0埋めは覚えておくと役に立つことでしょう。
それでは始めていきましょう。
zfill関数
まずはzfillという関数を使ってゼロ埋めしていく方法を試してみます。
使い方は「文字列.zfill(ゼロ埋めする桁数)」です。
test1 = 1
print(str(test1).zfill(1))
print(str(test1).zfill(2))
print(str(test1).zfill(3))
実行結果
1
01
001
「ゼロ埋めする桁数」に応じて数字の左側に0が追加されました。
異なる桁数の数値を同じ桁数になるようにzfill関数でゼロ埋めしてみたのがこちら。
test2 = [1, 10, 100]
print(str(test2[0]).zfill(5))
print(str(test2[1]).zfill(5))
print(str(test2[2]).zfill(5))
実行結果
00001
00010
00100
桁数が綺麗に揃いました。
注意点としてはzfill関数が使えるのはあくまでも「文字列(str型)」です。
上記のように数字(int型やfloat型)に使うためには「str()」で文字列にする必要があります。
またint型に使用するとエラーとなります。
test1 = 1
print(test1.zfill(1))
実行結果
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Input In [17], in <cell line: 3>()
1 test1 = 1
----> 3 print(test1.zfill(1))
AttributeError: 'int' object has no attribute 'zfill'
そしてもう一つ大切なことは、もう一度言いますがzfill関数が使えるのは「文字列」です。
つまり数字だけでなく、文字に対してもゼロ埋めすることができます。
test3 = ['a', 'ab', 'abc']
print(test3[0].zfill(5))
print(test3[1].zfill(5))
print(test3[2].zfill(5))
実行結果
0000a
000ab
00abc
ちなみにもしゼロ埋めする桁数がその文字列の数よりも少ない場合は何も起こりません。
test4 = 10000
print(str(test4).zfill(3))
実行結果
10000
f文字列(フォーマット文字列)を使ってゼロ埋め
文字列をゼロ埋めするもう一つの方法としてf文字列(フォーマット文字列)を使ってゼロ埋めする方法があります。
その場合は「{変数:0桁数}」と書くとゼロ埋めしてくれます。
test5 = 100
print(f'{test5:05}')
実行結果
00100
この書き方、最初は紹介するつもりはなかったのですが、ゼロ以外でも埋めれるのかなと色々遊んでいたところ、「0」を書かないとスペース埋めになることが分かりました。
これはzfill関数ではできないことなので、面白いなと思い今回紹介してみました。
test5 = 100
print(f'{test5:5}')
実行結果
100
ちなみに1埋めや2埋めなんかができないかなと思って試してみたのですが、その場合は十数個や二十数個のスペース埋めになってしまいました。
つまり基本的には十分だと思いますが、「0埋め」か「スペース埋め」しかできないということなので注意してください。
zfill関数を使う方法もf文字列を使う方法もどちらも便利なので頭の片隅にでも置いておくときっと役に立つと思います。
次回は繰り返し関数のwhileの使い方を見ていきましょう。
ではでは今回はこんな感じで。
コメント