字符串格式化
Python的内置方法和标准库所支持的字符串格式化方法一共有以下4种:
- % 操作符
- format 内置函数
- f-string 语法
- Template 标准库
方式一:% 操作符
其格式说明符和 C 语言常用的格式化方法一致。
"""
%[sign][width][.precision][long][type]
"""
标志 | 描述 | 备注 |
---|---|---|
sign |
对齐标志 | + 结果右对齐,输出符号(正号或负号, 符号占一个宽度单位)- 结果左对齐,右边填空格,正号不输出,输出负号 (空格)结果右对齐,左边填空格,正号不输出,输出负号 |
width |
输出内容的最小宽度,如果内容不够,填充空格 | |
.precision |
显示精度(针对浮点型) | |
long |
长度格式 | h 短整型l 长整型 |
type |
格式化后的目标值显示类型 | %c 单个字符%d 十进制有符号整数%u 十进制无符号整数%e 科学计数法, 使用小写"e"%E 科学计数法, 使用大写"E"%f 浮点数%g 使用%e或%f中较短的一个%G 使用%E或%f中较短的一个%i 带符号整数,同 %d%o 无符号以八进制表示的整数%s 字符串%x 无符号的十六进制表示的正数,字母以小写 abcdef 表示%X 无符号的十六进制表示的正数,字母以大写 ABCDEF 表示%% 一个'%'符号 |
按位置依次对应
参数需要和格式化的顺序、位置一一对应
# 格式化示例
>>> "%s" % 22
'22'
# 浮点数示例
>>> "%5.2f" % 22.245
'22.25'
# 右对齐显示符号
>>> "%+5d" % 22
' +22'
>>> "%+5d" % -22
' -22'
# 拼接
>>> "%d个%s" % (22, "鸡蛋")
'22个鸡蛋'
>>> k = 'name'
>>> v = 'Jack'
>>> "%s = %s" % (k, v)
'name = Jack'
按名称索引
通过字典方式格式化,打破了位置带来的限制与困扰
>>> k = 'name'
>>> v = 'Jack'
>>> "%(key)s = %(value)s" % {'key': k, 'value': v}
'name = Jack'
相信很多熟悉C语言的朋友能很快了解这一点的使用,但是这个已经是Python中不提倡的用法了,因此本文不过多介绍!
方式二:format 内置函数
格式说明符如下:
format(value, 'specifier') -> str
str(value).format('specifier') -> str
"""
specifier 格式如下:
[[fill]align][sign][#][0][width][,|_][.precision][type]
"""
格式描述符标志:
标志 | 描述 | 备注 |
---|---|---|
fill |
填充字符,默认填充为空格 | |
align |
对齐标志 | < 左对齐(默认)> 右对齐^ 居中对齐= 强制将填充内容放置在符号(如果有)之后但位于数字之前, 仅适用于数字参数 |
sign |
符号标志 | + 负数前加负号,正数前加正号- 负数前加负号,正数前不加任何符号(默认) (空格)负数前加负号,正数前加一个空格 |
# |
可选标志:# 选项,适用于数字参数,同时仅适用于目标格式为 2, 8, 16 进制的数字,会在输出的数字前添加 0b, 0o, 0x 前缀 | #b 二进制#o 八进制#x 十六进制 |
0 |
可选标志:0 选项,如果未给出明确的对齐方式, 可以在宽度字段前加上一个 0 字符。 这相当于填充字符 0, 对齐方式为 = | |
width |
最终展示的长度,如果内容不够,默认填充空格,或者由 fill 指定 | |
, or _ |
数字间隔符 | |
.precision |
显示精度 | - 对于由 f/e 或 F/E 格式化的浮点数,该选项指定小数点后的位数 - 对于有 g 或 G 格式化的浮点数,表示小数点前后 一共 多少位 - 对于非整数类型的参数,该选项指定字段最大宽度 |
type |
格式化后的目标值显示类型 |
目标值显示类型(type标志):
类型 | 输出描述 |
---|---|
d | 整型的十进制 |
b | 整型的二进制 |
o | 整型的八进制 |
x | 整型的十六进制(字母小写表示) |
X | 整型的十六进制(字母大写表示) |
f, F | 浮点型表示 |
e | 科学计数法: [-]m.dddddde±xx ,默认精度为 6 |
E | 科学计数法: [-]m.ddddddE±xx |
g, G | 一般形式, 受 precision 选项影响 |
n | 入参为整数时,类似 d , 会使用当前区域设置插入适当的数字分隔符入参为浮点数时,和 g 相同, 会使用当前区域设置插入适当的数字分隔符 |
% | 百分比展示,入参乘100,追加百分号,默认精度为6 |
s | 字符串或任何其他类型的对象,调用对象的 __str__() 方法 |
c | 单个字符,在输出前将整数转化成对应的 unicode 字符 |
按位置依次对应
a = 3.141592654
d = {'a': a}
>>> "{:0<6.2f} {:0<7.3f}".format(a, a)
'3.1400 3.14200'
按名称索引
>>> "{val:0<6.2f} {val:0<7.3f}".format(val=a)
'3.1400 3.14200'
>>> "{val[a]:0<6.2f} {val[a]:0<7.3f}".format(val=d)
'3.1400 3.14200'
>>> class Values:
... a = 3.141592654
...
>>> "{val.a:0<6.2f} {val.a:0<7.3f}".format(val=Values)
'3.1400 3.14200'
按参数下标索引
>>> "{0:0<6.2f} {0:0<7.3f}".format(a)
'3.1400 3.14200'
>>> "{0[a]:0<6.2f} {0[a]:0<7.3f}".format(d)
'3.1400 3.14200'
方式三:f-string语法
f-string语法是Python3.6推出的,是当前备受推荐的字符串格式化方法,该部分我们放到本文的第二大部分讲。
方式四:Template 标准库
>>> from string impo