字符串格式化

Python的字符串格式化有两种方式: 百分号方式、format方式

格式化字符串时,Python使用一个字符串作为模板。模板中有格式符,这些格式符为真实值预留位置,并说明真实数值应该呈现的格式。Python用一个tuple将多个值传递给模板,每个值对应一个格式符。

百分号方式:

可以用如下的方式,对格式进行进一步的控制
 



%[(name)][flags][width].[precision]typecode

(name)为命名

flags可以有+,-,' '或0。+表示右对齐。-表示左对齐。' '为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐。0表示使用0填充。

width表示显示宽度

precision表示小数点后精度



 

[  ]:表示可选

fill:可选,空白处填充的字符

align:可选,对其方式(需配合width使用)

<,内容左对齐

>,内容右对齐(默认)

=,内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即使:符号+填充物+数字

^,内容居中

sign:可选,有无符号数字

+,正号加正,负号加负;

 -,正号不变,负号加负;

空格 ,正号空格,负号加负;

#:可选,对于二进制、八进制、十六进制,如果加上#,会显示0b/0o/ox,否则不显示

:可选,为数字添加分隔符,如:1,000,000

width:可选,格式化位所占宽度

.precision:可选,小数位保留精度

type:可选,格式化类型

传入” 字符串类型 “的参数

  • s,格式化字符串类型数据
  • 空白,未指定类型,则默认是None,同s
  • 传入“ 整数类型 ”的参数
  • b,将10进制整数自动转换成2进制表示然后格式化
    c,将10进制整数自动转换为其对应的unicode字符
    d,十进制整数
    o,将10进制整数自动转换成8进制表示然后格式化;
    x,将10进制整数自动转换成16进制表示然后格式化(小写x)
  • X,将10进制整数自动转换成16进制表示然后格式化(大写X)
  • 传入“ 浮点型或小数类型 ”的参数
  • e, 转换为科学计数法(小写e)表示,然后格式化;
  • E, 转换为科学计数法(大写E)表示,然后格式化;
  • f , 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
  • F, 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
  • g, 自动在e和f中切换
  • G, 自动在E和F中切换
  • %,显示百分比(默认显示小数点后6位)
s = 'i am %s,age %d' % ('kai',19)
print(s)
执行结果:i am kai,age 19
s = 'i am %(n1)s,age %(n2)s' % {'n1':'kai','n2':'100'}
print(s)
执行结果:i am kai,age 100
s = 'percent %.2f' % 1.2222
print(s)
执行结果:percent 1.22
s = 'i am %(zz).2f'%{'zz':3.555555}
print(s)
执行结果:i am 3.56

s = 'i am %(kai).2f %%' %{'kai':2.55555}
print(s)
执行结果:i am 2.56 %

 format:



[[fill]align][sign][#][0][width][,][.precision][type]



 

[  ]:表示可选

fill:可选,空白处填充的字符

align:可选,对其方式(需配合width使用)

<,内容左对齐

>,内容右对齐(默认)

=,内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即使:符号+填充物+数字

^,内容居中

sign:可选,有无符号数字

+,正号加正,负号加负;

 -,正号不变,负号加负;

空格 ,正号空格,负号加负;

#:可选,对于二进制、八进制、十六进制,如果加上#,会显示0b/0o/ox,否则不显示

:可选,为数字添加分隔符,如:1,000,000

width:可选,格式化位所占宽度

.precision:可选,小数位保留精度

type:可选,格式化类型

传入” 字符串类型 “的参数

  • s,格式化字符串类型数据

  空白,未指定类型,则默认是None,同s

传入“ 整数类型 ”的参数

  • b,将10进制整数自动转换成2进制表示然后格式化
  • c,将10进制整数自动转换为其对应的unicode字符
  • d,十进制整数
  • o,将10进制整数自动转换成8进制表示然后格式化;
  • x,将10进制整数自动转换成16进制表示然后格式化(小写x)
  • X,将10进制整数自动转换成16进制表示然后格式化(大写X)

传入“ 浮点型或小数类型 ”的参数

  • e, 转换为科学计数法(小写e)表示,然后格式化;
  • E, 转换为科学计数法(大写E)表示,然后格式化;
  • f , 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
  • F, 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
  • g, 自动在e和f中切换
  • G, 自动在E和F中切换
  • %,显示百分比(默认显示小数点后6位)

代码如下:



zz = "i am {}, age {}, {}".format("seven",18,"alex")
print(zz)
执行结果:i am seven, age 18,alex

zz = "i am {}, age {}, {}".format(*["seven",18,"alex"])
print(zz)
执行结果:i am seven, age 18,alex

zz = "i am {0}, age {1}, really {0}".format("seven",18)
print(zz)
执行结果:i am seven, age 18, really seven

zz = "i am {0}, age {1}, really {0}".format(*["seven",18])
print(zz)
执行结果:
i am seven, age 18, really seven

zz = "i am {name}, age{age}, really {name}".format(name = "seven",age = 18)
print(zz)
执行结果:
i am seven, age18, really seven

zz = "i am {name}, age{age}, really {name}".format(**{"name":"seven","age":18})
print(zz)
执行结果:
i am seven, age18, really seven

zz = "i am {0[0]}, age {0[1]}, really {0[2]}".format([1,2,3],[11,22,33])
print(zz)
执行结果:
i am 1, age 2, really 3

zz = "i am {:s}, age{:d}, money{:f}".format("seven",18,3.1415926)
print(zz)
执行结果:
i am seven, age18, money3.141593

zz = "i am {:s}, age {:d}".format("seven",18)
print(zz)
执行结果:
i am seven, age 18

zz = "i am {name:s}, age {age:d}".format(name = "seven", age = 18)
print(zz)
执行结果:
i am seven, age 18

zz ="i am {name:s}, age {age:d}".format(**{"name":"seven","age":18})
print(zz)
执行结果:
i am seven, age 18

zz = "numbers: {:b},{:o},{:d},{:x},{:X},{:%}".format(15,15,15,15,15,15.87623,2)
print(zz)
执行结果:
numbers: 1111,17,15,f,F,1587.623000%

zz = "numbers: {0:b},{0:o},{0:d},{0:x},{0:X},{0:%}".format(15)
print(zz)
执行结果:
numbers: 1111,17,15,f,F,1500.000000%

zz = "numbers:{num:b},{num:o},{num:d},{num:x},{num:X},{num:%}".format(num = 15)
print(zz)
执行结果:
numbers:1111,17,15,f,F,1500.000000%