Pythonの0埋め(ゼロパディング)の使い方!format・小数点・int型まで網羅

Pythonの0埋め(ゼロパディング)の使い方!format・小数点・int型まで網羅 プログラミングの疑問解決

数値を「001」「002」のように統一された桁数で表示したい場面は、プログラミングでよく遭遇します。

Pythonでは、この「0埋め(ゼロパディング)」を簡単に実現できる複数の方法が用意されています。

この記事では、基本的なzfill()メソッドから、柔軟性の高いformat()メソッド、そして最新のf文字列まで、実践的なコード例とともに徹底解説します。

【本記事の信頼性】

  • 執筆者は元エンジニア
  • 大手プログラミングスクールのWebディレクター兼ライターを経験
  • 自らも地元密着型のプログラミングスクールを運営
未経験者におすすめの
プログラミングスクール
■Webエンジニアの育成に特化
■自社開発企業への転職成功率がダントツ
■ハイスキルを求める人に最適
■サポートは半永久的
■単価80万円以上の講師陣
■AWSやJavaに強い
■受講料完全無料
■最短1か月で卒業
■教室への通学も可能

Pythonの0埋めとは?

まずは、Pythonにおける、数値や文字列を決まった桁数に揃える「0埋め(ゼロパディング)」について簡単に解説します。

0埋め(ゼロパディング)の定義

0埋め(ゼロパディング)とは、数値や文字列の前に0を追加して、指定された桁数に揃える処理のことです。
例えば、「5」という数値を3桁に揃える場合、「005」のように表示します。

この技術は、ファイル名の連番管理やデータの整形において非常に重要な役割を果たしています。

Pythonでは、複数の方法で0埋めを実現できます。
それぞれの方法には特徴があり、使用する場面によって使い分けることが大切です。

なぜ0埋めが必要なのか

0埋めが必要な理由はいくつかあります。

まず、ファイル名を連番で管理する際、「file1.txt」「file10.txt」「file2.txt」のような順番になってしまうことを防げます。
0埋めを使えば、「file001.txt」「file002.txt」「file010.txt」のように正しくソートできるようになります。

また、データベースや帳票での表示を統一する場合にも重要です。
社員番号や商品コードなど、決まった桁数で管理したいケースは多いのではないでしょうか。

さらに、時刻表示(例:09:05)やカレンダーの日付(例:2025/01/05)など、日常的に目にする場面でも0埋めが活用されています。

Pythonでの0埋めの方法

Pythonには0埋めを実現する複数の方法があり、それぞれに特徴と適した使用場面があります。

ここからは、実際のコード例を交えながら、各手法の使い方と活用シーンを解説します。

zfill()メソッドを使った0埋め

zfill()メソッドは、文字列に対して使用できる最もシンプルな0埋め方法です。

指定した桁数になるまで、文字列の左側に0を追加します。

# 基本的な使い方
number = "42"
padded = number.zfill(5)
print(padded)  # 出力: 00042

# 数値の場合は文字列に変換してから使用
num = 7
padded_num = str(num).zfill(3)
print(padded_num)  # 出力: 007

# 既に指定桁数以上の場合
long_number = "12345"
result = long_number.zfill(3)
print(result)  # 出力: 12345(変化なし)

zfill()メソッドの特徴として、負の数値にも対応している点が挙げられます。
マイナス記号は0埋めの前に配置されるため、適切な表示が可能でしょう。

# 負の数値の場合
negative = "-42"
padded_negative = negative.zfill(6)
print(padded_negative)  # 出力: -00042

format()メソッドを使った0埋め

format()メソッドは、より柔軟な書式設定が可能です。
0埋めだけでなく、様々なフォーマット指定ができるため、複雑な要件にも対応できます。

# 基本的な0埋め
number = 42
formatted = "{:05d}".format(number)
print(formatted)  # 出力: 00042

# 文字列の0埋め
text = "7"
formatted_text = "{:0>4s}".format(text)
print(formatted_text)  # 出力: 0007

# 複数の値を同時にフォーマット
year = 2025
month = 1
day = 5
date = "{:04d}/{:02d}/{:02d}".format(year, month, day)
print(date)  # 出力: 2025/01/05

format()メソッドでは、書式指定子を使って詳細な制御ができます。

「:05d」は「5桁の10進数で0埋め」を意味し、「:0>4s」は「4桁の文字列で右寄せ0埋め」を表します。

f文字列(フォーマット済み文字列リテラル)を使った0埋め

Python 3.6以降で使用できるf文字列は、最も新しく、読みやすい方法です。
変数を直接埋め込めるため、コードの可読性が向上します。

# 基本的な使い方
number = 42
padded = f"{number:05d}"
print(padded)  # 出力: 00042

# 変数を使った動的な桁数指定
width = 6
value = 123
result = f"{value:0{width}d}"
print(result)  # 出力: 000123

# 時刻表示の例
hour = 9
minute = 5
time_display = f"{hour:02d}:{minute:02d}"
print(time_display)  # 出力: 09:05

f文字列は実行速度も速く、Pythonでの文字列フォーマットの推奨方法となっています。
特に複雑な文字列操作を行う場合、他の方法よりも簡潔に記述できるでしょう。

int型数値の0埋め

数値を文字列として扱う場合

int型の数値を0埋めする際は、一度文字列に変換してから処理を行います。

# 連番ファイル名の生成
for i in range(1, 6):
    filename = f"file_{i:03d}.txt"
    print(filename)
# 出力:
# file_001.txt
# file_002.txt
# file_003.txt
# file_004.txt
# file_005.txt

# 商品コードの生成
product_id = 42
formatted_id = f"PRD{product_id:06d}"
print(formatted_id)  # 出力: PRD000042

数値として保持したい場合の注意点

重要な点として、0埋めした結果は文字列になることを理解しておく必要があります。

数値として扱いたい場合は、必要に応じて型変換を行ってください。

# 0埋めした文字列を数値に戻す
padded_string = "00042"
number = int(padded_string)
print(number)  # 出力: 42
print(type(number))  # 出力: <class 'int'>

# リスト内包表記での活用
numbers = [1, 10, 100, 1000]
padded_list = [f"{n:05d}" for n in numbers]
print(padded_list)  # 出力: ['00001', '00010', '00100', '01000']

小数点を含む数値の0埋め

小数点を含む数値の0埋めは、整数部分と小数部分で異なる処理が必要です。

format()メソッドやf文字列を使うと、簡単に実現できます。

# 小数点以下の桁数を指定
value = 3.14
formatted = f"{value:06.2f}"
print(formatted)  # 出力: 003.14

# 整数部分と小数部分の桁数を個別に指定
price = 42.5
formatted_price = f"{price:07.2f}"
print(formatted_price)  # 出力: 0042.50

# 科学的記数法での0埋め
scientific = 1.23e-4
formatted_sci = f"{scientific:010.3e}"
print(formatted_sci)  # 出力: 01.230e-04

実際のアプリケーションでは、金額表示で0埋めがよく使われます。
以下のような実装が一般的でしょう。

# 金額のフォーマット関数
def format_price(amount):
    return f"¥{amount:08.2f}"

# 使用例
prices = [100, 1500.5, 42.99, 0.5]
for price in prices:
    print(format_price(price))
# 出力:
# ¥00100.00
# ¥01500.50
# ¥00042.99
# ¥00000.50

0埋めの削除方法

0埋めされた文字列から余分な0を削除する方法もいくつかあります。

状況に応じて適切な方法を選択してください。

lstrip()メソッドを使用

# 左側の0を削除
padded = "00042"
removed = padded.lstrip("0")
print(removed) # 出力: 42

# 注意:すべて0の場合
all_zeros = "0000"
result = all_zeros.lstrip("0") or "0"
print(result) # 出力: 0

int()関数を使用

# 数値に変換して0を削除
padded_number = "00042"
number = int(padded_number)
print(number)  # 出力: 42

# 小数点を含む場合
padded_float = "003.140"
float_number = float(padded_float)
print(float_number)  # 出力: 3.14

正規表現を使用

より複雑なパターンに対応する場合は、正規表現が便利でしょう。

import re

# 先頭の0を削除(ただし最低1桁は残す)
def remove_leading_zeros(text):
    return re.sub(r'^0+(?=\d)', '', text)

# 使用例
examples = ["00042", "0000", "10000", "00.50"]
for ex in examples:
    print(f"{ex} → {remove_leading_zeros(ex)}")
# 出力:
# 00042 → 42
# 0000 → 0
# 10000 → 10000
# 00.50 → 0.50

まとめ

Pythonでの0埋めは、データの整形や表示を統一する上で欠かせない技術です。

zfill()メソッド、format()メソッド、f文字列という3つの主要な方法があり、それぞれに特徴があります。

初心者の方は、まずzfill()メソッドから始めることをおすすめします。
シンプルで理解しやすく、基本的な0埋めには十分でしょう。

より複雑な要件が出てきたら、format()メソッドやf文字列を活用してください。

Follow me!

PAGE TOP