Python 補零教學:zfill()、rjust()、format() 的用法與實務範例完整解析

目次

1. 前言

在 Python 中,格式化數值或字串時,常會使用「補零(Zero Padding)」技巧。透過補零,我們可以統一數值資料的位數,或讓資料格式更加一致。舉例來說,將數值「5」表達為「005」,可以提升資料的可讀性,或符合特定格式的需求。 本文將介紹在 Python 中進行補零的多種方法,並詳細說明每種方式的適用情境與注意事項。為了讓初學者也能輕鬆理解,會從基本方法介紹到進階應用,建議讀者閱讀至最後。

1.1 什麼是補零?

補零是指當資料長度不足指定位數時,在前面補上「0」以統一位數的處理方式。以下是一些常見的應用情境:
  • 統一數值的位數(例如:7 → 007)
  • 統一檔名或資料格式(例如:image1.pngimage001.png
  • 統一日期與時間的顯示方式(例如:3:503:05
Python 提供了多種補零的方法,根據用途選擇最合適的方式非常重要。

1.2 什麼情況下需要補零?

在 Python 中,以下是一些會需要補零的常見情境:

1.2.1 格式化數值資料時

  • 為了統一 ID 或代碼(如商品編號、會員編號等)
  • 輸出指定位數的數值時

1.2.2 整理檔名或資料格式時

  • 統一圖片或日誌檔案的編號
  • 讓檔案在排序時正確排列(例如:file1file001

1.2.3 格式化時間與日期資料時

  • 使用 datetime 物件輸出日期時進行補零
  • 維持兩位數格式(例如:2024-3-5 → 2024-03-05)

1.2.4 統一程式輸出的格式時

  • 統一畫面顯示或日誌輸出的格式
  • 讓 UI 上的數字顯示一致、容易閱讀

1.3 本文結構

本篇文章將依下列順序介紹如何使用 Python 進行補零:
  1. 推薦的補零方法
  • 介紹 zfill()rjust()format() 等常用方法
  1. 使用補零時的注意事項
  • 比較 zfill()rjust() 的差異與效能
  1. 實務中常見的補零應用範例
  • 數值資料、日期時間、多語言語法差異等
  1. 常見問答(FAQ)
  • 常見錯誤與對應解決方式
  1. 總結
  • 不同方法的比較與最佳選擇指南

2. Python 補零的推薦方法

Python 提供了多種進行補零的方法,根據使用情境與資料型別的不同,選擇合適的方法是非常重要的。本章節將詳細介紹三種主要方式:zfill()rjust()format()(以及 f 字串)。

2.1 使用 zfill() 補零(最簡單的方法)

zfill() 是 Python 的字串方法之一,會在左側補上 0,直到達到指定的位數。這是最簡單的一種補零方法。

基本語法

字串.zfill(位數)

使用範例

num = "5"
print(num.zfill(3))  # 輸出: 005

num2 = "123"
print(num2.zfill(5))  # 輸出: 00123

帶正負號的數值範例

num = "-5"
print(num.zfill(4))  # 輸出: -005
優點
  • 補零操作簡單
  • 保留 -+ 的符號
  • 直覺易懂
缺點
  • 無法直接用於數值(需先轉為字串)

2.2 使用 rjust() 補零(更通用的方法)

rjust() 是一種將字串補到指定長度的方法,可以指定任意補上的字元,因此除了補 0 外,也能用於其他用途。

基本語法

字串.rjust(位數, 補上字元)

使用範例

num = "5"
print(num.rjust(3, "0"))  # 輸出: 005
優點
  • zfill() 更有彈性(可用任意字元)
  • 適用於非數值的字串格式整理
缺點
  • 無法直接應用於數值(需先轉為字串)

2.3 使用 format() 與 f 字串補零

透過 Python 的 format() 方法與 f 字串(f-string),可以更靈活地進行補零操作。

使用 format() 的方法

"{:0N}".format(數值)
N 表示總位數)

使用範例

num = 5
print("{:03}".format(num))  # 輸出: 005

使用 f 字串的方式

f"{變數:0N}"

使用範例

num = 7
print(f"{num:03}")  # 輸出: 007
優點
  • 可直接用於數值型別
  • 格式控制彈性高
  • 使用 f 字串可提升可讀性
缺點
  • Python 3.6 以下版本不支援 f 字串(需改用 format()

2.4 該使用哪種方法?(比較表)

方法適用對象支援直接使用數值支援符號可指定任意補字
zfill()字串
rjust()字串
format()數值 / 字串
f 字串數值 / 字串

2.5 小結

Python 中有多種補零方式,根據情況選擇合適的方法非常關鍵:
  • 想快速補零 → 使用 zfill()
  • 想補其他字元 → 使用 rjust()
  • 想對數值補零 → 使用 format() 或 f 字串
  • 想對小數點以下進行補零 → 使用 format() 或 f 字串
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

3. 補零時的注意事項

在 Python 中有多種補零方法,但若使用不當,可能會導致預期外的結果或錯誤。本章將詳細說明使用補零時常見的注意事項與陷阱。

3.1 zfill() 不能直接應用於數值

zfill()專屬於字串的函式,因此如果直接用在數值(如整數)上,會發生錯誤。

錯誤示範

num = 5
print(num.zfill(3))  # 錯誤: AttributeError: 'int' object has no attribute 'zfill'

正確寫法(轉換成字串)

num = 5
print(str(num).zfill(3))  # 輸出: 005
若要補零給數值,建議使用 format() 或 f 字串。

3.2 zfill() 處理帶符號的數值

當使用 zfill() 處理負數時,符號會保留在最前面,補零會加在符號後
num = "-7"
print(num.zfill(4))  # 輸出: -007
如果你希望完全自訂帶符號的補零格式,建議使用 format() 或 f 字串,並手動處理符號。

3.3 rjust() 的限制

rjust() 可以使用任意字元補位,但不會正確處理數值的符號,所以不適合用來補符號數字。
num = "-5"
print(num.rjust(4, "0"))  # 輸出: 00-5 (格式錯誤)
若要正確處理帶符號的補零,應選擇 zfill()format()

3.4 使用 format() 和 f 字串的注意事項

在使用 format() 或 f 字串進行補零時,若格式指定錯誤,可能會得到不正確的結果。

補整數的範例

num = 5
print(f"{num:03}")  # 輸出: 005

處理小數的範例

num = 3.5
print(f"{num:06.2f}")  # 輸出: 003.50
處理小數時,請同時指定整數位與小數位的長度。

3.5 不同方法的效能差異

當處理大量資料時,選擇不同補零方法會影響執行速度。
方法適用對象效能
zfill()字串
rjust()字串
format()數值 / 字串
f 字串數值 / 字串最快
若需處理大量資料,建議優先使用 f 字串(如 f"{num:03}")。

3.6 依作業系統或 Python 版本的差異

某些格式化函式(如 strftime())可能在不同作業系統上行為略有不同。
from datetime import datetime

now = datetime(2024, 3, 5, 7, 8)
print(now.strftime("%Y-%m-%d %H:%M"))  # 輸出: 2024-03-05 07:08
使用內建補零功能時,需注意跨作業系統的差異(尤其是在 Linux 與 Windows 間)。

3.7 小結

zfill() 適用於字串,支援符號,但不能直接用於數值 ✅ rjust() 可用其他字元補位,但不適用於處理符號 ✅ format() 與 f 字串可直接用於數值,彈性高且效能佳 ✅ 補小數時需指定小數位數 ✅ 處理大量資料時 f 字串效能最佳 ✅ strftime() 的行為可能依作業系統而異

4. 實務中實用的補零範例

Python 的補零功能在日常程式開發與商業系統中非常常見且實用。本章將介紹幾個在實務中常見且具有參考價值的使用場景。

4.1 數值資料的補零(會員編號、商品代碼等)

在資料庫或管理系統中,為了統一 ID 或商品代碼的格式,常會使用補零來統一位數。

4.1.1 範例:會員編號格式化

member_id = "123"
formatted_id = member_id.zfill(5)
print(formatted_id)  # 輸出: 00123

4.1.2 範例:商品代碼統一格式

product_id = 42
formatted_code = f"{product_id:05}"
print(formatted_code)  # 輸出: 00042
為了讓 ID 或代碼有一致性,可使用補零方式處理。zfill() 適合字串處理,format() 則可直接用於數值。

4.2 日期與時間的補零(搭配 datetime 使用)

將日期與時間補零後統一格式輸出,也是常見需求之一。

4.2.1 使用 strftime() 自動補零

from datetime import datetime

now = datetime(2024, 3, 5, 7, 8)
formatted_date = now.strftime("%Y-%m-%d %H:%M")
print(formatted_date)  # 輸出: 2024-03-05 07:08
使用 strftime() 可輕鬆取得補零後的標準格式日期。

4.2.2 使用 f 字串手動補零

day = 5
month = 3
formatted_date = f"{2024}-{month:02}-{day:02}"
print(formatted_date)  # 輸出: 2024-03-05
使用 f 字串格式化(例如 {變數:02})也能進行手動補零。

4.3 補零與補空白的差異

除了補零,有時也會需要使用空白來統一位數,這在列印帳單或排版時很常見。

4.3.1 使用 rjust() 進行空白補齊

text = "123"
formatted_text = text.rjust(5)
print(f"'{formatted_text}'")  # 輸出: '  123'
zfill() 會補 0,rjust() 預設會補空白。

4.4 Python 與其他語言的補零比較(C 語言、Java)

與其他程式語言相比,Python 的補零功能更簡潔直觀。以下是與 C 語言和 Java 的比較:

4.4.1 C 語言的寫法

#include <stdio.h>

int main() {
    int num = 7;
    printf("%03d\n", num);  // 輸出: 007
    return 0;
}
C 語言使用 %03d 的格式符號即可補零。

4.4.2 Java 的寫法

public class Main {
    public static void main(String[] args) {
        int num = 7;
        System.out.printf("%03d\n", num);  // 輸出: 007
    }
}
Java 使用 printf("%03d"),寫法與 C 類似,也可補零。Python 的優勢
  • 透過 format() 或 f 字串可以更直觀地控制格式
  • 也可使用 zfill()rjust() 等字串方法補零

4.5 小結

Python 的補零功能,在 資料格式化、時間處理、報表輸出 等情境中極為實用: ✅ 會員編號、商品代碼補零
  • 使用 zfill() 處理字串,使用 format() 處理數值
日期時間的補零
  • 使用 strftime() 可自動補零
  • 也可用 f"{變數:02}" 手動補零
補零 vs 補空白
  • zfill() 會補 0,rjust() 可補空白
與其他語言相比,Python 的補零更簡單靈活
  • format() 與 f 字串提供高可讀性與強大彈性
侍エンジニア塾

5. 補零常見問題(FAQ)

許多 Python 開發者在處理補零時,會遇到類似的疑問。本章節將整理並解答這些常見問題,幫助你更有效率地使用補零功能。

5.1 zfill()rjust() 有何不同?

問題: zfill()rjust() 都能補零,它們的差異是什麼?應該用哪一個? 解答: 兩者雖然都能將字串補齊至指定長度,但有以下幾點不同:
方法補的字元支援數值符號保留
zfill()只能補 0✕(僅限字串)○(保留負號位置)
rjust()可補任意字元✕(僅限字串)✕(不處理符號)
範例:
num = "-5"

print(num.zfill(4))       # 輸出: -005
print(num.rjust(4, "0"))  # 輸出: 00-5(格式錯誤)
需要處理符號時建議使用 zfill()。 若需要補的是非 0 的字元,例如空白或特殊符號,請使用 rjust()

5.2 補零時一定要先轉成字串嗎?

問題: 如果我要補零給一個數值(例如整數),是否一定要使用 str() 將它轉成字串? 解答: zfill()rjust() 是字串的方法,因此無法直接作用於 intfloat。 若要使用它們,必須先轉成字串。 範例(需轉字串):
num = 7
print(str(num).zfill(3))  # 輸出: 007
但若使用 format() 或 f 字串,就不需要轉換
num = 7
print(f"{num:03}")  # 輸出: 007
建議使用 format() 或 f 字串進行數值補零,較為直覺且彈性高。

5.3 如何補零顯示 datetime 時間物件?

問題: 我想要補零後顯示 datetime 物件的內容,應該怎麼做? 解答: 可使用 strftime() 方法,它會自動補零。 範例:
from datetime import datetime

now = datetime(2024, 3, 5, 7, 8)
print(now.strftime("%Y-%m-%d %H:%M"))  # 輸出: 2024-03-05 07:08
也可以使用 f 字串手動格式化:
year, month, day = 2024, 3, 5
formatted = f"{year}-{month:02}-{day:02}"
print(formatted)  # 輸出: 2024-03-05
處理 datetime 建議使用 strftime(),簡單又安全。

5.4 補零時發生錯誤的原因與解決方法?

問題: 在使用補零時常常出現錯誤訊息,原因是什麼?該怎麼處理?
錯誤訊息原因解決方法
AttributeError: 'int' object has no attribute 'zfill'zfill() 只能用在字串先使用 str() 轉換,或改用 format()
TypeError: non-empty format string passed to object.__format__使用 format() 時對象為 Nonelist先轉換為整數再格式化
ValueError: Unknown format code 'd' for object of type 'str'格式化字串時錯誤使用數值格式將字串轉回整數再套用格式
錯誤範例與修正:
# 錯誤寫法
num = 7
# print(num.zfill(3))  # 錯誤!

# 正確寫法
print(str(num).zfill(3))  # 輸出: 007
print(f"{num:03}")        # 輸出: 007
若遇到錯誤,第一步請檢查資料型別(int 或 str)。

5.5 小結

zfill() 適合補有符號的字串數值 ✅ 補數值時建議使用 format() 或 f 字串,簡潔又安全 ✅ 處理日期時間時可使用 strftime()f"{num:03}" 是最快速又直觀的補零方式

6. 總結

本文詳細介紹了在 Python 中進行補零(Zero Padding)的方法與技巧。補零能夠統一數值或字串的格式,提升資料的可讀性與一致性。以下將重點整理,幫助你根據實際需求選擇最合適的補零方式。

6.1 Python 各種補零方法比較

Python 提供多種補零方法,每種都有其適用情境與特色:
方法特色適用對象是否可直接用於數值是否支援符號是否可補任意字元
zfill()將字串補零字串✕(需轉字串)
rjust()靠右補任意字元字串✕(需轉字串)
format()格式靈活、用途廣數值 / 字串
f 字串可讀性高、速度快數值 / 字串
要補數值請選擇 format() 或 f 字串要處理符號可用 zfill()需要補其他字元則用 rjust()

6.2 回顧實務中的使用範例

補零在許多實務應用中扮演重要角色: ✅ 會員編號或商品代碼補零
product_id = 42
formatted_code = f"{product_id:05}"
print(formatted_code)  # 輸出: 00042
日期時間的標準化格式
from datetime import datetime

now = datetime(2024, 3, 5, 7, 8)
formatted_date = now.strftime("%Y-%m-%d %H:%M")
print(formatted_date)  # 輸出: 2024-03-05 07:08
錯誤處理
num = 7
# print(num.zfill(3))  # 會錯誤
print(str(num).zfill(3))  # 輸出: 007
print(f"{num:03}")        # 輸出: 007

6.3 效能比較

在處理大量資料時,不同補零方法的效能也有差異。 補零 10 萬次所需時間(越短越快):
方法執行時間
zfill()0.018 秒
format()0.016 秒
f 字串0.012 秒(最快)
大量處理時建議使用 f 字串zfill() 使用簡單,但 format() 與 f 字串效能更佳

6.4 結論:根據需求選擇最佳補零方法

Python 的補零功能多樣,請根據實際需求做選擇: 🔹 新手適用、簡單快速zfill() 🔹 直接處理數值format() 或 f 字串 🔹 符號數值補零zfill() 🔹 補非 0 的字元rjust() 🔹 效能優先、大量資料 → f 字串(最快) 希望這篇文章能幫助你在 Python 中有效使用補零技巧,讓資料格式更整齊、輸出更專業!