Python - 字符串格式化

207 阅读4分钟

字符串的格式化主要有两种,第一种是 % 形式的,第二种是python特有的,format 形式的。

  • 百分号形式
s = "我是%s, 我今年%d岁。" % ("mary", 18)
print(s) # 我是mary, 我今年18岁。
  • format形式
t = "我是{}, 我今年{}岁。".format('mary', 18)
print(t) # 我是mary, 我今年18岁。

以下是详细说明:

一、百分号形式

格式:

%[(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]也可以不设置,此时仅剩表格中的正负数的讨论

image.png

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%

参考:【Python基础】之字符串格式化(%百分号形式和format形式)_lincoco49的博客-CSDN博客_python字符串百分号