本文参考了燕双嘤的博文Python:格式化字符串,对部分内容做了修改和扩充,在案例上做了详细说明注释。
一,使用%操作符
"%[-][+][0][m][.n]格式化字符"%exp
格式字符 | 说明 | 格式字符 | 说明 |
%s | 字符串(采用str()显示) | %r | 字符串 |
%c | 单个字符 | %o | 八进制数 |
%d或者%i | 十进制数 | %e | 指数(基底为e) |
%x | 十六进制数 | %E | 指数(基底为E) |
%f或者%F | 浮点数 | %% | 字符 |
例如:
x = 123
s = "%s" % x
print(s) # 123
print(type(s)) # <class 'str'>
x = 123
s = "%s , %o" % (x , x+1)
print(s) # 123 , 174
二,使用format()方法
"{[index][:[[fill]align][sign][#][width][.precision][type]]}"
[:[[fill]align][sign][#][width][.precision][type]]称为格式化说明(format-spec),以冒号开头,有六部分可选内容组成。是使用format进行字符串格式化的重要组成部分。
index | 可选参数,用于指定要设置格式的对象在参数列表中的索引 位置,索引值从0开始,如果省略,则根据值的先后顺序自动分配 |
fill | 可选参数,用于指定空白处填写的字符 |
align | 可选参数,用于指定对齐方式(值为<表示内容左对齐(文本形式展示的默认方式);值为>表示内容右对齐(数字形式展示的默认方式);值为=表示内容右对齐,将符号填在内容的最左侧(仅针对数字形式展示有效);值为^表示内容居中对齐),需要与width配合使用 |
sign | 可选参数,用于指定有无符号数(+:表示正数加正号;-:表示正数不变,负数加负号;空格:正数加空格,负数加负号;,:以逗号分隔的数字格式) |
# | 可选参数,对于二进制,八进制和十六进制,如果加上“#”,表示会显示0b/0o/0x前缀,否则不显示前缀 |
width | 可选参数,用于指定最小宽度,即字符串至少应该有该值指定的字符数,也就是宽度。 |
.precision | 可选参数,如果字符串转为实数,则用于指定转换后数字保留的小数位数;如果字符串转为字符串,那么该数字表示转换后的最大保留字符数。 |
type | 字符串转为什么形式数据来按格式展示。 |
type选项
格式字符 | 说明 | 格式字符 | 说明 |
s | 对字符串类型格式化 | b | 将十进制整数自动转换成二进制表示再格式化 |
d | 十进制整数 | o | 将十进制整数自动转换成八进制表示再格式化 |
c | 将十进制整数自动转换成对应的Unicode字符 | x或者X | 将十进制整数自动转换成十六进制表示再格式化 |
e或者E | 转化成科学计数法表示再格式化 | f或者F | 转换为浮点数(默认保留6位)再格式化 |
g或者G | 自动在e和f或者E和F中切换 | % | 显示百分比 |
例如:
import math
# 格式化说明为:,.2f使用了[sign][.precision][type]三部分
# sign为,即以逗号分隔数字
# .precision为.2,即保留两位小数
# type为f,即以浮点数形式展示字符串
# 打印结果为 ¥5,201.00元
print('¥{:,.2f}元'.format(1251+3950))
# index为0,即手动设定取用的format参数内容(如果为手动指定,则第二个格式化说明无法取到内容)
# 第一个格式化说明:.1f使用了[.precision][type]两部分
# .precision为.1,即保留一位小数
# type为f,即以浮点数形式展示字符串
# 第二个格式化说明:E使用了[type]
# type为E,即以科学计数法的形式展示字符串
# 打印结果为 120000.1用科学计数法表示:1.200001E+05
print('{0:.1f}用科学计数法表示:{0:E}'.format(120000.1))
# 第一个格式化说明:.0%使用了[.precision][type]两部分
# .precision为.0,即保留0位小数
# type为%,即以百分比展示字符串
# 第二个格式化说明:.2%使用了[.precision][type]两部分
# .precision为.2,即保留2位小数
# type为%,即以百分比展示字符串
# 打印结果为 天才是由1%的灵感,加上99.00%的汗水
print('天才是由{:.0%}的灵感,加上{:.2%}的汗水'.format(0.01,0.99))#按百分比输出
# 第一个格式化说明:{:0>9s}使用了[[fill]align][width][type]三部分
# fill为0 align为>,即右对齐,不足最小宽度的话,用0在左侧填充
# 注:文本形式展示默认左对齐,所以这里声明右对齐。
# width为9,即最少展示9个字符
# type为s,即以文本形式展示
# 第二个和第三个格式化说明{:s}使用了[type]
# type为s,即以文本形式展示字符串
# 打印结果如下
# 编号:000000007 公司名称:百度 官网: http://www.baidu.com
# 编号:000000008 公司名称:淘宝 官网: http://www.taobao.com
template='编号:{:0>9s}\t公司名称:{:s}\t官网: http://www.{:s}.com'
context1=template.format('7','百度','baidu')
context2=template.format('8','淘宝','taobao')
print(context1+'\n'+context2)