推荐使用 f-Strings
字符串格式化之一:%-formatting
和 string.Template
转化说明符表达式:
%[转换标记][宽度[.精确度]]转换类型
转换标记 | 解释 |
---|---|
- | 表示左对齐 |
+ | 在正数前面显示加号 (+) |
* | 定义宽度或者小数点精度 |
# | 在八进制数前面显示零 (‘0’),在十六进制前面显示 ‘0x’ 或者 ‘0X’ |
% | 输出一个单一的 ‘%’ |
0 | 显示的数字前面填充 ‘0’ 而不是默认的空格 |
在正数前面显示空格 | |
(var) | 映射变量(字典参数) |
转换类型 | 解释 |
---|---|
c | 转换为单个字符,对于数字将转换为该值所对应的 ASCII 码 |
s | 转换为字符串,对于非字符串,将默认调用 str() 函数进行转换 |
r | 用 repr() 函数进行字符串转换 |
i d | 转换为带符号的十进制数 |
u | 转换为不带符号的十进制数 |
o | 转换为不带符号的八进制数 |
x X | 转换为不带符号十六进制数 |
e E | 转换为科学计数法表示的浮点数 |
f F | 转换为浮点数(小数部分自然截断) |
常见用法:
直接格式化字符或者数值
>>> print("Your height is %.2f m" % (1.72))
your height is 1.72 m
以元组的形式格式化
>>> itemtuple = ('panfeng', 24, 1.72)
>>> print("Name:%-13s Age:%-8d Height:%-3.2f" % itemtuple)
Name:panfeng Age:24 Height:1.72
以字典的形式格式化
>>> itemdic = {"name": "panfeng", "age": 24, "height": 1.72}
>>> print("Name:%(name)-13s Age:%(age)-8d Height:%(height)-3.2f" % itemdic)
Name:panfeng Age:24 Height:1.72
string.Template
>>> import string
>>> st = string.Template("Name:$name Age:$age Height:$height")
>>> itemdict = {"name": "panfeng", "age": 24, "height": 1.72}
>>> st.substitute(itemdict)
'Name:panfeng Age:24 Height:1.72'
字符串格式化之二:str.format()
表达式:
"{[replacement_field]}".format()
# 替换字段的语法如下:
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
field_name ::= arg_name ("." attribute_name | "[" element_index "]")*
arg_name ::= [identifier | digit+]
attribute_name ::= identifier
element_index ::= digit+ | index_string
index_string ::= <any source character except "]"> +
conversion ::= "r" | "s" | "a"
format_spec ::= <described in the next section>
# 标准格式说明符的一般形式是:
format_spec ::= [[fill]align][sign][#][0][width][grouping_option][.precision][type]
fill ::= <any character>
align ::= "<" | ">" | "=" | "^"
sign ::= "+" | "-" | " "
width ::= digit+
grouping_option ::= "_" | ","
precision ::= digit+
type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
常见用法
不指定位置,按默认顺序
>>> "{}{}{}".format("No1", "No2", "No3")
'No1No2No3'
设置指定位置
>>> "{0}{1}{0}".format("No1", "No2", "No3")
'No1No2No1'
直接设置参数
>>> "{thi}{sec}{fir}".format(fir="No1", sec="No2", thi="No3")
'No3No2No1'
通过列表索引设置参数
>>> itemlist = ["No1", "No2", "No3"]
>>> "{0[0]}{0[1]}{0[2]}".format(itemlist)
'No1No2No3'
通过字典设置参数
>>> itemdict = {"fir": "No1", "sec": "No2", "thi": "No3"}
>>> "{fir}{sec}{thi}".format(**itemdict)
'No1No2No3'
字符串格式化之三:f-Strings
表达式:
f' <text> {<expression><optional !s, !r, or !a><optional:format specifier>} <text> ...'
处理 f-string 中的花括号:
>>> fs = f'{{}}'
'{}'