字符串格式化{}的用法
Python
Python 中字符串格式化{}的用法,特别是.format()和 f-string 中使用的格式说明符(Format Specification Mini-Language)。
🌟 一、字符串格式化方法概览
Python 提供了多种字符串格式化方式:
.format()方法(推荐,灵活)- f-string(Python 3.6+,最现代、高效)
%格式化(旧式,不推荐)
本文重点讲解 {} 在 .format() 和 f-string 中的 格式说明符语法。
🧩 二、{} 中的格式说明符语法结构
完整的格式说明符语法如下:
{:[fill][align][sign][#][0][width][,][.precision][type]}
注:
:之后的部分统称为 format_spec
各部分可选,顺序固定。我们逐个讲解。
1️⃣ fill:填充字符(可选)
- 作用:当字段宽度大于内容时,用指定字符填充空白。
- 默认是空格。
- 如果要指定非空格填充,必须与
align一起使用。
示例:
'{:.<10}'.format(123) # '123.......' 用点填充
'{:_^10}'.format('hi') # '___hi____' 居中,用下划线填充
'{:0>5}'.format(42) # '00042' 右对齐,用0填充⚠️ 注意:如果
fill不是空格,必须紧接着align(即<,>,^,=)
2️⃣ align:对齐方式(可选)
| 符号 | 含义 |
|---|---|
< |
左对齐(Left) |
> |
右对齐(Right) |
^ |
居中对齐(Center) |
= |
数值类型专用:符号在左,填充在中间(如 +000123) |
示例:
'{:<10}'.format('abc') # 'abc ' 左对齐
'{:>10}'.format('abc') # ' abc' 右对齐
'{:^10}'.format('abc') # ' abc ' 居中
'{:=+8d}'.format(123) # '+ 123' 符号左,填充居中3️⃣ sign:正负号显示方式(仅数字)
| 符号 | 含义 |
|---|---|
+ |
正数显示 +,负数显示 - |
- |
负数显示 -,正数不显示符号(默认) |
空格 |
正数前加空格,负数显示 - |
示例:
'{:+d}'.format(123) # '+123'
'{:+d}'.format(-123) # '-123'
'{: d}'.format(123) # ' 123'(空格)
'{: d}'.format(-123) # '-123'4️⃣ #:替代形式(Alternate form)
用于某些类型显示前缀:
| 类型 | 作用 |
|---|---|
b |
二进制:加 0b 前缀 |
o |
八进制:加 0o 前缀 |
x/X |
十六进制:加 0x/0X 前缀 |
g/G |
保留末尾的0 |
示例:
'{:#b}'.format(10) # '0b1010'
'{:#o}'.format(10) # '0o12'
'{:#x}'.format(255) # '0xff'
'{:#X}'.format(255) # '0xFF'5️⃣ 0:零填充(等价于 fill=0 + align=)
- 如果
width前有0,表示用0填充。 - 常用于日期、编号等。
示例:
'{:08d}'.format(123) # '00000123'
'{:06.2f}'.format(3.1) # '003.10' 总宽6,保留2位小数6️⃣ width:最小字段宽度(可选)
- 表示该字段至少占多少个字符宽度。
- 如果内容不足,按
align规则填充。 - 如果内容更长,则按实际长度显示(不会截断)。
示例:
'{:10}'.format('hi') # 'hi '(右对齐,默认)
'{:<10}'.format('hi') # 'hi '(左对齐)
'{:>10}'.format('hi') # ' hi'7️⃣ ,:千位分隔符(Thousands Separator)
- 用于大数字,每三位加逗号。
- 也可用
_(Python 3.6+ 支持)
示例:
'{:,d}'.format(1234567) # '1,234,567'
'{:_d}'.format(1234567) # '1_234_567'(用下划线)
'{:,.2f}'.format(1234.5) # '1,234.50'8️⃣ .precision:精度(小数位数或最大长度)
- 对 浮点数:表示小数点后保留几位。
- 对 字符串:表示最多显示多少个字符(超出则截断)。
示例(浮点数):
'{:.2f}'.format(3.14159) # '3.14'
'{:.0f}'.format(3.7) # '4'(四舍五入)示例(字符串):
'{:.3s}'.format('hello') # 'hel'(只取前3个字符)9️⃣ type:数据类型(最关键)
| 类型 | 含义 | 示例 |
|---|---|---|
d |
十进制整数 | {:d} → 123 |
b |
二进制 | {:b} → 1111011 |
o |
八进制 | {:o} → 173 |
x |
小写十六进制 | {:x} → 7b |
X |
大写十六进制 | {:X} → 7B |
f |
浮点数 | {:f} → 3.141593 |
F |
浮点数(支持 INF, NAN) |
{:F} |
e |
科学计数法(小写) | {:e} → 1.23e+04 |
E |
科学计数法(大写) | {:E} → 1.23E+04 |
g |
自动选择 f 或 e |
{:g} |
G |
自动选择 F 或 E |
{:G} |
% |
百分比(×100 + %) |
{:.2%} → 49.67% |
s |
字符串(默认) | {:s} → 'abc' |
n |
数字(带本地化分隔符) | {:n} |
示例:
'{:b}'.format(10) # '1010'
'{:x}'.format(255) # 'ff'
'{:.2e}'.format(1234.5) # '1.23e+03'
'{:.2%}'.format(0.123) # '12.30%'🧪 三、综合示例
value = 1234.567
# 各种组合
print('{:0>10,.2f}'.format(value)) # '001,234.57' 右对齐,0填充,千分位,2位小数
print('{:^15.1f}'.format(value)) # ' 1234.6 ' 居中,宽度15,1位小数
print('{:+.2%}'.format(0.876)) # '+87.60%' 正号,百分比,2位小数
print('{:#010x}'.format(255)) # '0x000000ff' 十六进制,0填充到10位,含0x
print('{:.5s}'.format('Hello World')) # 'Hello' 截断为5字符✅ 四、f-string 中的用法(推荐)
f-string 语法更简洁,功能完全相同:
name = 'Alice'
score = 87.6
pi = 3.1415926
f'{name:>10}' # ' Alice'
f'{score:.1f}' # '87.6'
f'{pi:.3f}' # '3.142'
f'{score:.2%}' # '8760.00%' ❌ 注意:score 是 87.6,不是 0.876
f'{score/100:.2%}' # '87.60%' ✅📌 五、常见陷阱与建议
%百分比是 ×100 的:传入的是小数(如0.5),不是百分数(如50)。width是最小宽度:内容长了不会截断。fill和align必须一起用:不能只写{:a>5},要写{:a>5}。.precision对字符串是截断,对浮点是四舍五入。
📘 六、官方文档参考
Python 官方文档中称为 “Format Specification Mini-Language”:
👉 https://docs.python.org/3/library/string.html#format-specification-mini-language
✅ 总结:常用格式速查表
| 需求 | 格式符 | 示例 |
|---|---|---|
| 千位分隔整数 | :,d |
1,234,567 |
| 保留2位小数 | :.2f |
3.14 |
| 百分比(2位小数) | :.2% |
49.67% |
| 左对齐宽度10 | :<10 |
abc_______ |
| 右对齐0填充 | :06d |
000123 |
| 二进制 | :b |
1010 |
| 十六进制 | :x 或 :X |
ff 或 FF |
| 居中宽度10 | :^10} |
___abc____ |
如果你有具体的应用场景(比如格式化金额、日期、表格对齐等),我可以给出更针对性的例子!欢迎继续提问 😊