数値を「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文字列を活用してください。