Python format 格式化详解
str.format() 是 Python 中用于字符串格式化的核心方法,通过占位符 {} 结合参数替换,实现灵活的字符串拼接,比传统的 % 格式化更强大、易读。
一、基础用法
1. 位置占位符
(1)按顺序匹配
占位符 {} 无编号时,按参数顺序一一对应:
python
运行
ini
# 基础示例
text = "{} 是 {} 年的第一天".format(1月1日, 2026)
print(text) # 输出:1月1日 是 2026 年的第一天
# 多参数示例
info = "姓名:{},年龄:{},城市:{}".format("张三", 25, "北京")
print(info) # 输出:姓名:张三,年龄:25,城市:北京
(2)指定位置编号
通过 {数字} 指定参数顺序(数字对应 format 入参的索引,从 0 开始),可重复使用参数:
python
运行
ini
text = "第{1}名:{0},{0} 获得了{1}名的好成绩".format("李四", 1)
print(text) # 输出:第1名:李四,李四 获得了1名的好成绩
2. 关键字占位符
通过 {关键字} 匹配 format 的命名参数,可读性更高,参数顺序可任意:
python
运行
ini
info = "姓名:{name},年龄:{age},城市:{city}".format(age=25, name="张三", city="北京")
print(info) # 输出:姓名:张三,年龄:25,城市:北京
# 结合字典(解包**)
user = {"name": "王五", "age": 30, "city": "上海"}
info = "姓名:{name},年龄:{age},城市:{city}".format(** user)
print(info) # 输出:姓名:王五,年龄:30,城市:上海
二、进阶用法(格式控制)
在占位符内通过 : 指定格式,语法:{占位符:格式说明},支持数字、字符串、日期等格式化。
1. 数字格式化
| 格式符 | 作用 | 示例 | 输出 |
|---|---|---|---|
d |
整数(十进制) | "{:d}".format(123) |
123 |
f |
浮点数(指定小数位) | "{:.2f}".format(3.1415) |
3.14 |
% |
百分比格式 | "{:.1%}".format(0.85) |
85.0% |
, |
千分位分隔符 | "{:,}".format(1234567) |
1,234,567 |
0填充 |
补零到指定长度 | "{:04d}".format(12) |
0012 |
python
运行
python
# 浮点数保留2位小数
print("圆周率:{:.2f}".format(3.1415926)) # 输出:圆周率:3.14
# 百分比格式
print("通过率:{:.1%}".format(0.925)) # 输出:通过率:92.5%
# 整数补零(总长度4)
print("编号:{:04d}".format(8)) # 输出:编号:0008
2. 字符串格式化
| 格式符 | 作用 | 示例 | 输出 |
|---|---|---|---|
<n |
左对齐(总长度 n) | "{:<10}".format("Python") |
Python |
>n |
右对齐(总长度 n) | "{:>10}".format("Python") |
Python |
^n |
居中对齐(总长度 n) | "{:^10}".format("Python") |
Python |
填充字符 |
自定义填充 | "{:*<10}".format("Python") |
Python**** |
python
运行
python
# 居中对齐,总长度10,填充-
print("标题:{:-^10}".format("公告")) # 输出:标题:----公告----
# 左对齐,总长度8
print("用户名:{:<8}".format("admin")) # 输出:用户名:admin (后补空格)
3. 日期格式化(需结合 datetime)
python
运行
perl
from datetime import datetime
now = datetime(2026, 1, 1, 10, 30, 0)
# 格式:年-月-日 时:分:秒
date_text = "当前时间:{:%Y-%m-%d %H:%M:%S}".format(now)
print(date_text) # 输出:当前时间:2026-01-01 10:30:00
三、常见场景示例
1. 拼接复杂字符串
python
运行
ini
# 商品信息格式化
product = {"name": "手机", "price": 2999.99, "stock": 500}
text = "商品:{name},单价:{price:.2f}元,库存:{stock:,}台".format(** product)
print(text) # 输出:商品:手机,单价:2999.99元,库存:500台
2. 动态生成 SQL 语句
python
运行
sql
# 安全拼接SQL(避免硬编码)
sql = "SELECT * FROM user WHERE name = '{name}' AND age > {age}".format(name="张三", age=20)
print(sql) # 输出:SELECT * FROM user WHERE name = '张三' AND age > 20
四、注意事项
-
占位符匹配:关键字占位符必须与 format 的命名参数一致,位置占位符索引不能超出参数数量,否则报错。
-
格式符兼容 :不同类型的参数需匹配对应格式符(如整数用
d,浮点数用f),否则报错。 -
简洁替代 :Python 3.6+ 支持 f-string(
f"{变量}"),是 format 的简化版,更高效:python
运行
ininame = "张三" age = 25 print(f"姓名:{name},年龄:{age}") # 等价于 format 写法,更简洁