Python zfill()メソッドの完全ガイド:ゼロ埋め文字列処理を徹底解説

 

Pythonのzfill()メソッドは、文字列の左側に0(ゼロ)を埋めて指定した長さの文字列を作成する便利な機能です。データの整形、ファイル名の統一、数値の桁揃えなど、様々な場面で活用される重要なメソッドです。

本記事では、Python初心者から中級者まで理解できるよう、zfill()メソッドの基本的な使い方から実践的な応用例まで詳しく解説します。

zfill()メソッドとは

zfill()メソッドは、文字列の左側にゼロ(0)を追加して、指定した長さの文字列を返すPython文字列の組み込みメソッドです。主に数値文字列の桁揃えやデータの整形に使用されます。

基本構文

文字列.zfill(長さ)

基本的な使い方

数値文字列のゼロ埋め

number = "123"
padded = number.zfill(5)
print(padded)  # "00123"

短い文字列の場合

text = "7"
result = text.zfill(3)
print(result)  # "007"

既に十分な長さの場合

long_text = "12345"
result = long_text.zfill(3)
print(result)  # "12345"(変更なし)

数値との組み合わせ

整数のゼロ埋め

number = 42
padded = str(number).zfill(4)
print(padded)  # "0042"

浮動小数点数のゼロ埋め

price = 9.99
formatted = str(price).zfill(6)
print(formatted)  # "009.99"

負数の処理

negative = "-5"
result = negative.zfill(4)
print(result)  # "-005"(符号の後にゼロが追加)

実践的な使用例

ファイル名の統一

file_number = 7
filename = f"file_{str(file_number).zfill(3)}.txt"
print(filename)  # "file_007.txt"

ID番号の生成

user_id = 123
formatted_id = f"USER{str(user_id).zfill(6)}"
print(formatted_id)  # "USER000123"

時間データの整形

hour = 9
minute = 5
time_str = f"{str(hour).zfill(2)}:{str(minute).zfill(2)}"
print(time_str)  # "09:05"

データ処理での活用

CSVデータの整形

data = ["1", "23", "456"]
formatted_data = [item.zfill(4) for item in data]
print(formatted_data)  # ['0001', '0023', '0456']

バーコードの生成

product_code = 12345
barcode = str(product_code).zfill(13)
print(f"JAN: {barcode}")  # "JAN: 0000000012345"

シリアル番号の処理

serial_base = 789
serial_number = f"SN{str(serial_base).zfill(8)}"
print(serial_number)  # "SN00000789"

ファイル操作での活用

連番ファイルの作成

for i in range(1, 4):
    filename = f"image_{str(i).zfill(3)}.jpg"
    print(filename)
# image_001.jpg
# image_002.jpg
# image_003.jpg

ログファイルの命名

import datetime
now = datetime.datetime.now()
log_name = f"log_{str(now.day).zfill(2)}.txt"
print(log_name)  # "log_15.txt"(日付による)

バックアップファイル名

backup_number = 5
backup_name = f"backup_{str(backup_number).zfill(4)}.bak"
print(backup_name)  # "backup_0005.bak"

Web開発での活用

URL生成

page_number = 3
url = f"https://example.com/page/{str(page_number).zfill(4)}"
print(url)  # "https://example.com/page/0003"

セッションIDの生成

import random
session_id = random.randint(1, 9999)
formatted_session = f"SESS{str(session_id).zfill(8)}"
print(formatted_session)  # "SESS00001234"(例)

API応答の整形

error_code = 404
formatted_error = f"ERR{str(error_code).zfill(5)}"
print(formatted_error)  # "ERR00404"

ゲーム開発での活用

スコア表示

score = 1250
display_score = str(score).zfill(8)
print(f"SCORE: {display_score}")  # "SCORE: 00001250"

レベル番号

level = 3
level_display = f"Level {str(level).zfill(2)}"
print(level_display)  # "Level 03"

プレイヤーID

player_number = 42
player_id = f"P{str(player_number).zfill(4)}"
print(player_id)  # "P0042"

他の文字列整形方法との比較

format()メソッドとの比較

number = 123

# zfill()を使用
result1 = str(number).zfill(6)
print(result1)  # "000123"

# format()を使用
result2 = "{:06d}".format(number)
print(result2)  # "000123"

f-stringとの比較

number = 42

# zfill()を使用
result1 = str(number).zfill(4)
print(result1)  # "0042"

# f-stringを使用
result2 = f"{number:04d}"
print(result2)  # "0042"

rjust()メソッドとの比較

text = "123"

# zfill():ゼロで埋める
result1 = text.zfill(6)
print(result1)  # "000123"

# rjust():スペースで埋める
result2 = text.rjust(6)
print(result2)  # "   123"

# rjust():任意の文字で埋める
result3 = text.rjust(6, '0')
print(result3)  # "000123"

日付時刻処理での活用

日付の整形

year = 2025
month = 3
day = 7
date_str = f"{year}-{str(month).zfill(2)}-{str(day).zfill(2)}"
print(date_str)  # "2025-03-07"

時刻の表示

hours = 14
minutes = 5
seconds = 30
time_format = f"{str(hours).zfill(2)}:{str(minutes).zfill(2)}:{str(seconds).zfill(2)}"
print(time_format)  # "14:05:30"

データベース操作での活用

主キーの生成

record_id = 123
primary_key = f"REC{str(record_id).zfill(10)}"
print(primary_key)  # "REC0000000123"

外部キーの整形

user_ids = [1, 23, 456]
formatted_ids = [f"U{str(uid).zfill(6)}" for uid in user_ids]
print(formatted_ids)  # ['U000001', 'U000023', 'U000456']

数値計算での活用

座標の表示

x, y = 5, 12
coordinate = f"({str(x).zfill(3)}, {str(y).zfill(3)})"
print(coordinate)  # "(005, 012)"

パーセンテージの表示

percentage = 87
display = f"{str(percentage).zfill(3)}%"
print(display)  # "087%"

エラーハンドリング

非数値文字列の処理

text = "abc"
result = text.zfill(5)
print(result)  # "00abc"(エラーにならない)

空文字列の処理

empty = ""
result = empty.zfill(3)
print(result)  # "000"
print(len(result))  # 3

パフォーマンスの考慮

大量データの処理

import time

# zfill()の性能測定例
numbers = list(range(10000))
start = time.time()
results = [str(num).zfill(6) for num in numbers]
zfill_time = time.time() - start
print(f"zfill処理時間: {zfill_time:.4f}秒")

メモリ効率

# 効率的な使用例
def format_numbers(numbers, width):
    for num in numbers:
        yield str(num).zfill(width)

# 大量データに対してジェネレータを使用
formatted = format_numbers(range(1000), 5)

実際のプロジェクトでの活用

ログ解析ツール

def format_log_entry(timestamp, level, message):
    log_id = str(timestamp).zfill(10)
    return f"[{log_id}] {level}: {message}"

entry = format_log_entry(12345, "INFO", "処理完了")
print(entry)  # "[0000012345] INFO: 処理完了"

在庫管理システム

def generate_product_code(category, number):
    code = f"{category}{str(number).zfill(6)}"
    return code

product_code = generate_product_code("A", 123)
print(product_code)  # "A000123"

注文番号の生成

import datetime

def create_order_number(order_id):
    date_part = datetime.date.today().strftime("%Y%m%d")
    id_part = str(order_id).zfill(6)
    return f"ORD{date_part}{id_part}"

order_num = create_order_number(42)
print(order_num)  # "ORD20250129000042"

デバッグとテスト

テスト用のヘルパー関数

def test_zfill_behavior():
    test_cases = [
        ("123", 5, "00123"),
        ("0", 3, "000"),
        ("-5", 4, "-005"),
        ("12345", 3, "12345")
    ]
    
    for text, width, expected in test_cases:
        result = text.zfill(width)
        assert result == expected, f"期待値: {expected}, 実際: {result}"
    
    print("全テストケース成功")

test_zfill_behavior()

高度な活用例

カスタム書式設定

def custom_format(value, total_width, prefix="", suffix=""):
    core_width = total_width - len(prefix) - len(suffix)
    padded = str(value).zfill(core_width)
    return f"{prefix}{padded}{suffix}"

result = custom_format(123, 10, "ID:", "_END")
print(result)  # "ID:00123_END"

条件付きゼロ埋め

def conditional_zfill(value, width, condition=True):
    if condition:
        return str(value).zfill(width)
    return str(value)

result1 = conditional_zfill(42, 5, True)   # "00042"
result2 = conditional_zfill(42, 5, False)  # "42"

まとめ

Python の zfill() メソッドは、文字列の左側にゼロを埋めて指定した長さにする便利な機能です。データの整形、ファイル名の統一、数値の桁揃えなど、様々な場面で活用できます。

重要なポイント:

  • 文字列の左側にゼロを追加
  • 負数の場合は符号の後にゼロを追加
  • 既に指定長以上の場合は変更なし
  • format()やf-stringでも同様の処理が可能

本記事で紹介した様々な使用例を参考に、実際のプロジェクトで zfill() メソッドを効果的に活用してください。データの一貫した整形により、より読みやすく保守性の高いコードを作成できるでしょう。

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座