字符串的格式化主要有两种,第一种是%形式的,第二种是python特有的,format形式。
#百分号形式
s = "我是%s, 我今年%d岁。" % ("mary", 18)
print(s)# 我是mary, 我今年18岁。
#format形式
t = "我是{}, 我今年{}岁。".format('mary', 18)
print(t)# 我是mary, 我今年18岁。
1.百分号形式
格式:
- %[(name)][flags][width].[precision]typecode(称为一个占位符)
- 传值时,在字符串“...” 后加上百分号%和一个传值的元组,依次传入字符串中的%占位符。
格式说明:
- []表示该项是可选的,在使用过程中,可以使用,也可以不使用;没有用[]括起来的%和typecode是必选的。
- 当要字符串中要传入%号,那么用%%表示一个%,比如下方代码:
s = "酒精的度数是%.2f%%"%(47)
print(s)#酒精的度数是47.00%
- [typecode]有以下常见的几种
- s:字符串
- d:整数
- o:将十进制整数转化为八进制,传入指定位置
- x:将十进制转化为十六进制,传入指定位置
- e/E:将整数/浮点数转化为科学记数法,传入指定位置
- f/F:将整数/浮点数转化为小数位数为6的浮点数,传入指定位置
- [(name)] 传值时按照name传值,一定要加上(),传值时用字典传入,传入的参数可以不按照字符串中占位符的顺序,如下示例
s = "我是%(name)s, 我今年%(old)d岁。" % {'name': 'mary', 'old': 18}
print(s)# 我是mary, 我今年18岁。
t = "我是%(name)s, 我今年%(old)d岁。" % {'old': 18, 'name': 'mary'}
print(t)# 我是mary, 我今年18岁。
- [flags]与[width]配合使用,[flags]表示该占位符的对齐方式,[width表示该占位符的宽度]
[flags]可以为以下四种符号:+,-, (空格), 0表示,所表示的意思如下,其中[width]也可以不设置,此时仅剩表格中的正负数的讨论
+ | 右对齐 | 在[width]宽度下,占位符右对齐,如果传入值是一个正数,那么在右对齐的同时,在该数字前加+号,如果传入值是负数,则只右对齐,不作其他操作。 |
空格 | 右对齐 | 在[width]宽度下,占位符右对齐,如果传入值是一个正数,即使传入值前加+号,字符串中也不加正好,同时将原本该用+号的地方用空格替代,如果传入的是一个负数,那么只右对齐,不作其他操作。 |
0 | 右对齐 | 在[width]宽度下,占位符右对齐,其余部分用0填充,如果传入一个整数,不加+号,如果传入一个负数,那么-号放在最左边。 |
- | 左对齐 | 在[width]宽度下,左对齐,其余地方空格,正数前不加+,负数前加- |
s = "我是%(name)s, 我今年%(old)+8d岁。" % {'name': 'mary', 'old': +18}
print(s)# 我是mary, 我今年 +18岁。
s = "我是%(name)s, 我今年%(old) 8d岁。" % {'name': 'mary', 'old': +18}
print(s)# 我是mary, 我今年 18岁。
s = "我是%(name)s, 我今年%(old)-8d岁。" % {'name': 'mary', 'old': +18}
print(s)# 我是mary, 我今年18 岁。
s = "我是%(name)s, 我今年%(old)08d岁。" % {'name': 'mary', 'old': +18}
print(s)# 我是mary, 我今年00000018岁。
- [precision]表示当该占位符表示一个浮点数时,小数点后的位数,默认情况下为小数点后6位。
s = "%f" %(6.0)
print(s) #6.000000
当需要仅保留小数点后2位时:
s = "%.2f" %(6.0)
print(s) #6.00
2.format格式
格式:
- 占位符用{}表示,内部格式为:[[fill]align][sign][#][0][width][,][.precision][type],[]表示可选,所以当{}中什么都没有时,传入什么值就是什么值。
- 传值时,整体字符串的格式为:".....".format(传入的值),""中包含一些用{}表示的占位符。
格式说明:
- [fill]:按照某宽度对齐时空白处填充的字符
- [align]:对齐方式:<左对齐;>右对齐; =仅针对数字类型,右对齐,符号放在填充字符的左侧; ^居中
- [sign]:针对数字的正负号约定,+正好负号都加;-正号不变,负号要加;空格 正好处用空格填充,负号要加
- [#]: 对与二进制/八进制/十六进制数,加上#,字符串中会显示0b/0o/0x
- [,]: 为数字添加分隔符,例如1000000,表示为1,000,000
- [.precision]: 小数的保留位数
- [type]: 与百分号形式的相同,参见上文中的表格
- 声明格式时,都要在{}中先输入冒号:
s = "我是{}, 我今年{}岁。".format('mary', 18)#需按顺序传入
print(s)# 我是mary, 我今年18岁。
s = "我是{1}, 我今年{0}岁。".format(18, 'mary')#需按下标传入
print(s)# 我是mary, 我今年18岁。
s = "我是{name}, 我今年{old}岁。".format(old=18, name='mary')#需键值对传入
print(s)# 我是mary, 我今年18岁。
s = "我是{name}, 我今年{old}岁。".format(**{'old': 18, 'name': 'mary'})#需字典传入
print(s)# 我是mary, 我今年18岁。
s = "酒精的度数是{:.2f}%".format(47)
print(s)#酒精的度数是47.00%