数値や文字列を「001」「002」のように特定の桁数に揃える「0埋め(ゼロパディング)」。
プログラミングを始めたばかりの頃は「見た目を整えるだけ」と思いがちですが、それは大きな間違いです。
この記事では、基本的な zfill() から、現代のPython開発における「正解」であるf文字列まで、実務で火を噴かないためのテクニックを元エンジニアの視点で徹底解説します。
![]() |
|
【スクール選びで後悔したくない方へ】
4年連続で人気No.1となっている「RUNTEQ」は、当ブログで調査した数多くのスクールの中でも大変おすすめです。なぜ選ばれ続けているのか、 その理由や受講生の評判については、以下の記事で詳しくまとめています。
※直接公式サイトを確認したい方はRUNTEQ公式サイトからどうぞ。
なぜ「0埋め」が必要なのか?疎かにした時の悲劇
技術的な話の前に、なぜ0埋めが重要なのかを叩き込んでおきます。
一番分かりやすい例はファイル名の連番管理です。
例えば、「file1.txt」「file2.txt」「file10.txt」という3つのファイルがあったとしましょう。
これをプログラムで名前順にソートするとどうなるか。
「file1.txt → file10.txt → file2.txt」
という順番になってしまいます。
これは、コンピュータが「1の次は2」ではなく、文字列として「1の次は10(1の後に0が続いているから)」と判断してしまうためです。
これが原因で、最新のログを読み込んだつもりが10年前のデータを参照していた……なんて事故が現場では実際に起こります。
だからこそ、「file001.txt」「file002.txt」「file010.txt」のように0で桁数を揃える必要があるのです。
Pythonでの0埋め:3つの主要メソッド
Pythonには0埋めを実現する方法がいくつかありますが、現場で使うのは主に以下の3つです。
シンプルな文字列操作:zfill()メソッド
zfill() は、文字列(str型)の左側を指定した桁数まで0で埋めるメソッドです。
最も手軽ですが、「文字列に対してしか使えない」という点に注意が必要です。
# 基本的な使い方
number_str = "42"
print(number_str.zfill(5))
数値(int)の場合は文字列に変換が必要
num = 7
print(str(num).zfill(3))
負の数にも対応している
negative_num = "-42"
print(negative_num.zfill(6))
実行結果:
00042
007
-00042
zfill() は非常にシンプルです。
引数に「最終的な桁数」を渡すだけ。
特筆すべきは負の数への対応です。
実行結果の通り、マイナス記号を考慮して「-00042」と正しく埋めてくれます。
ただし、数値(int型)に直接使うとエラーになるので、必ず str() でキャストしてから使うようにしましょう。
柔軟な書式設定:format()メソッド
JavaやC言語を経験した人には馴染み深い、書式指定子を使った方法です。
# 数値の0埋め
number = 42
print("{:05d}".format(number))
複数の値を一気に成形
year, month, day = 2026, 2, 17
date_str = "{:04d}/{:02d}/{:02d}".format(year, month, day)
print(date_str)
実行結果:
00042
2026/02/17
{:05d} という書き方は、「5桁(5)の10進数(d)で、足りない部分は0(0)で埋める」という意味です。
複数の変数を一箇所にまとめたい時に便利ですが、正直、次に紹介する「f文字列」が登場してからは、現場でこの format() を積極的に使う理由は無くなりました。
現代の正解:f文字列(フォーマット済み文字列リテラル)
現在、Python 3.6以降を使っている現場であれば、0埋めは「f文字列」一択です。
# 基本的な使い方
number = 42
print(f"{number:05d}")
小数点を含む場合
pi = 3.14159
print(f"{pi:08.2f}")
実行結果:
00042
00003.14
上記のように、変数名を {} で囲むだけで直感的に記述できます。
{pi:08.2f} は「全体を8桁(.も含む)にし、小数点以下は2桁(.2f)で固定し、残りを0(0)で埋める」という高度な指定です。
僕がレビューをするなら、特別な理由がない限りこのf文字列を使うよう指導します。
圧倒的に読みやすく、タイプミスも減るからです。
【実録】初心者がハマる「int型」の勘違い
ここで、初心者がよくやってしまう失敗談を紹介しましょう。
以前、後輩が「0埋めをしたはずのデータが、データベースに入れると消えてしまうんです」と泣きついてきました。
彼のコードはこんな感じでした。
# 後輩の失敗コードのイメージ
user_id = 42
padded_id = f"{user_id:05d}" # ここで "00042" になる
final_id = int(padded_id) # 数値に戻してしまう
print(final_id)
実行結果:
42
当たり前ですが、「0埋めされた状態」を保持できるのは「文字列」だけです。
数値型(int)に戻した瞬間に、コンピュータは「先頭の0に意味はない」と判断して消し去ります。
社員番号や商品コードなど、0埋めが必要なデータは「表示・保存の直前まで文字列として扱う」のが鉄則です。
この基本を忘れると、DBに保存した後に「桁数がバラバラで検索できない」という地獄を見ることになります。
0埋めを解除(削除)する方法
逆に、送られてきたデータの「00042」を「42」に戻したい場合もあります。
padded_str = "00042"
方法1:数値に変換(最も確実)
num = int(padded_str)
print(f"int変換: {num}")
方法2:文字列のまま左側の0を消す
stripped = padded_str.lstrip("0")
print(f"lstrip: {stripped}")
実行結果:
int変換: 42
lstrip: 42
計算に使うなら int() で変換するのがベスト。
文字列として扱いつつ0だけ消したいなら lstrip("0") を使います。
ただし、lstrip は「0000」をすべて消して空文字にしてしまうリスクがあるため、lstrip("0") or "0" のように書くのが現場の防衛策です。
まとめ:状況に合わせた「0埋め」の選択
Pythonでの0埋めは、以下の基準で使い分けてください。
- 基本は「f文字列」を使う。 可読性が高く、今のPython開発のスタンダードです。
- 古いコードをいじるなら「format()」や「zfill()」が出てきても驚かない。
- 0埋めしたデータは「文字列」として扱う。 数値に戻すと0は消えます。
0埋めのような「データの成形」を正確に行えるようになると、複数のリストを突き合わせるインデックス付きループ(enumerate)などの処理でも、データの不整合によるバグを劇的に減らすことができます。
地味な処理こそ、プロのこだわりが出る部分です。
一つ一つのコードに意図を持って実装していきましょう。
なお、Pythonを最短で仕事レベルに引き上げたいなら、独学に限界を感じる前にプロの指導を仰ぐのも一つの手です。
「現場で通用する書き方」を直接学べる環境は、何物にも代えがたい財産になります。

実務未経験エンジニアでも希望の転職先を見つけやすい!!
週1~3日からできる副業案件多数!!
フリーランス案件の単価の高さは圧倒的!!
【スクール選びで後悔したくない方へ】
4年連続で人気No.1となっている「RUNTEQ」は、当ブログで調査した数多くのスクールの中でも大変おすすめです。なぜ選ばれ続けているのか、 その理由や受講生の評判については、以下の記事で詳しくまとめています。
※直接公式サイトを確認したい方はRUNTEQ公式サイトからどうぞ。



