1. 前言
在 Python 中,格式化數值或字串時,常會使用「補零(Zero Padding)」技巧。透過補零,我們可以統一數值資料的位數,或讓資料格式更加一致。舉例來說,將數值「5」表達為「005」,可以提升資料的可讀性,或符合特定格式的需求。
本文將介紹在 Python 中進行補零的多種方法,並詳細說明每種方式的適用情境與注意事項。為了讓初學者也能輕鬆理解,會從基本方法介紹到進階應用,建議讀者閱讀至最後。
1.1 什麼是補零?
補零是指當資料長度不足指定位數時,在前面補上「0」以統一位數的處理方式。以下是一些常見的應用情境:
- 統一數值的位數(例如:7 → 007)
- 統一檔名或資料格式(例如:
image1.png
→image001.png
) - 統一日期與時間的顯示方式(例如:
3:5
→03:05
)
Python 提供了多種補零的方法,根據用途選擇最合適的方式非常重要。
1.2 什麼情況下需要補零?
在 Python 中,以下是一些會需要補零的常見情境:
1.2.1 格式化數值資料時
- 為了統一 ID 或代碼(如商品編號、會員編號等)
- 輸出指定位數的數值時
1.2.2 整理檔名或資料格式時
- 統一圖片或日誌檔案的編號
- 讓檔案在排序時正確排列(例如:
file1
→file001
)
1.2.3 格式化時間與日期資料時
- 使用
datetime
物件輸出日期時進行補零 - 維持兩位數格式(例如:2024-3-5 → 2024-03-05)
1.2.4 統一程式輸出的格式時
- 統一畫面顯示或日誌輸出的格式
- 讓 UI 上的數字顯示一致、容易閱讀
1.3 本文結構
本篇文章將依下列順序介紹如何使用 Python 進行補零:
- 推薦的補零方法
- 介紹
zfill()
、rjust()
、format()
等常用方法
- 使用補零時的注意事項
- 比較
zfill()
與rjust()
的差異與效能
- 實務中常見的補零應用範例
- 數值資料、日期時間、多語言語法差異等
- 常見問答(FAQ)
- 常見錯誤與對應解決方式
- 總結
- 不同方法的比較與最佳選擇指南
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 字串
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()
是字串的方法,因此無法直接作用於 int
或 float
。
若要使用它們,必須先轉成字串。
範例(需轉字串):
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() 時對象為 None 或 list | 先轉換為整數再格式化 |
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 中有效使用補零技巧,讓資料格式更整齊、輸出更專業!