Python格式化:讓數據輸出更優雅
Python的格式化功能能讓數據輸出瞬間變得優雅又規范。不管是對齊文本、控制數字精度,還是動態填充內容,它都能輕松搞定。
一、基礎格式化:從簡單拼接開始
1. 百分號(%)格式化
在Python中,百分號格式化是一種傳統的字符串格式化方式,通過占位符來指定輸出的格式。常用的占位符有%s(字符串)、%d(整數)、%f(浮點數)。
name =?"Alice"
age =?25
print("我的名字是%s,今年%d歲。"?% (name, age))
#輸出:我的名字是 Alice,今年 25 歲。
核心要點:
-
占位符的數量和類型要與后面元組中的變量一一對應。
-
對于浮點數,可以使用%.nf指定小數位數,例如%.2f表示保留兩位小數。
2. format () 方法
format()方法是一種更靈活強大的格式化方式,通過花括號{}作為占位符,可以按位置、關鍵字或索引來填充內容。
name =?"Bob"
age = 30
print("我的名字是{},今年{}歲。".format(name, age))
# 按位置指定
print("{1}比{0}大5歲。".format(name,?"Charlie"))
# 按關鍵字指定
print("我叫{name},今年{age}歲。".format(name="David", age=35))#輸出:
我的名字是Bob,今年30歲。
Charlie比Bob大5歲。
我叫David,今年35歲。
3. f-string(格式化字符串字面值)
Python3.6引入的f-string 是最簡潔直觀的格式化方式,在字符串前加f,直接在花括號內嵌入表達式。
name =?"Ella"
age =?28
print(f"我的名字是{name},今年{age}歲。")
# 可以在花括號內進行運算
print(f"明年我就{age +?1}歲了。")
#輸出:
我的名字是Ella,今年28歲。
明年我就29歲了。
二、進階格式化
1. 對齊與填充
在輸出表格或固定格式文本時,常常需要對齊數據。通過:<(左對齊)、:>(右對齊)、:^(居中對齊)配合填充字符實現。
# 左對齊,用空格填充
print("{:<10}".format("蘋果"))
print("{:10}".format("蘋果"))
# 右對齊,用空格填充
print("{:>10}".format("香蕉"))
# 居中對齊,用空格填充
print("{:^10}".format("橙子"))
#輸出:
蘋果 ? ? ? ?
蘋果 ? ? ? ?香蕉橙子 ? ?
用其他字符填充:
# 左對齊,用 * 填充
print("{:*<10}".format("蘋果"))
# 右對齊,用 - 填充
print("{:->10}".format("橙子"))
# 居中對齊,用 # 填充
print("{:#^10}".format("香蕉"))#輸出:
蘋果********
--------橙子
####香蕉####
2. 數字格式化
對于數字,可以控制小數位數、千位分隔符、進制表示等。
num = 12345.6789
# 保留兩位小數
print("{:.2f}".format(num))
# 添加千位分隔符
print("{:,}".format(num))
# 二進制表示
print("{:b}".format(10))
# 八進制表示
print("{:o}".format(10))
# 十六進制表示 小寫字母
print("{:x}".format(10))
# 十六進制表示 大寫字母
print("{:X}".format(10))#輸出:
12345.68
12,345.6789
1010
12
a
A
3. 日期與時間格式化
結合datetime模塊,格式化日期和時間字符串。
from datetime import datetime
now = datetime.now()
# 常見日期格式
print(now.strftime("%Y-%m-%d %H:%M:%S"))
# 自定義格式
print(now.strftime("今天是%Y年%m月%d日,星期%a"))#輸出:
2025-04-2222:49:14
今天是2025年04月22日,星期Tue
三、實用案例展示
案例 1:制作數據統計表
在數據分析中,格式化可以讓結果展示更清晰。
data = {
"產品A":?1234.56,
"產品B":?7890.12,
"產品C":?567.89
}
print("| 產品 | 銷售額 |")
print("|------|--------|")
for?product, amount?in?data.items():print(f"| {product} | {amount:,.2f} |")#輸出:
| 產品 |?銷售額?|
|------|--------|
| 產品A |1,234.56|
|?產品B?| 7,890.12 |
| 產品C |567.89|
案例 2:生成個性化邀請函
利用 f-string 快速生成批量邀請函。
guests = ["Frank",?"Grace",?"Hank"]
for?guest?in?guests:print(f"{guest}先生/女士:\n 誠邀您參加我們的晚會!")#輸出:
Frank先生/女士:
誠邀您參加我們的晚會!
Grace先生/女士:
誠邀您參加我們的晚會!
Hank先生/女士:
誠邀您參加我們的晚會!
案例 3:文件命名中的動態格式化
在批量處理文件時,根據時間或序號格式化文件名。
import datetime
now = datetime.datetime.now()
file_name = f"report_{now.strftime('%Y%m%d%H%M%S')}.txt"
print(file_name)
#輸出:report_20241231143000.txt
四、閉坑指南
占位符與變量不匹配
- 錯誤操作
:百分號格式化中占位符數量、類型與變量不一致。
# 錯誤:少一個變量
print("姓名:%s,年齡:%d"?% ("Leo"))
- 解決方法
:仔細檢查占位符和變量的對應關系,使用format()或 f-string 可減少此類錯誤。
花括號轉義問題
- 錯誤操作
:在 f-string中想輸出花括號卻被解析為占位符。
# 錯誤:會報錯
print(f"這是一個{括號}")
- 解決方法
:使用雙花括號{{}}進行轉義。
print(f"這是一個{{括號}}")?# 輸出:這是一個{括號}
格式化語法混淆
- 錯誤操作
:混用不同格式化方式的語法。
# 錯誤:format()方法不能用百分號占位符
print("{}.format("錯誤示范") % "示例")
- 解決方法
:明確每種方式的規則,推薦優先使用 f-string,簡潔且不易出錯。
五、總結回顧
從基礎的字符串拼接,到復雜的數字、日期處理,再到個性化場景應用,掌握這些格式化技巧能讓你的程序輸出更專業、更美觀。下次遇到數據展示問題,不妨試試!