python笔记之字符串格式化

来源:互联网 发布:近则不逊远则怨 知乎 编辑:程序博客网 时间:2024/05/17 01:17

Python中字符串的格式化有两种方式:
1. 字符串格式化表达式,类似于C语言中的printf模型;
2. 字符串格式化方法调用,format方法。

字符串格式化表达式:"" % ()

格式化规则:%[(name)][flags][width][.precision]typecode

name: 字典键flags: 左对齐(-),正负号(+),补零(0)的标志位width: 位宽.precision: 小数点位数

width和precision可以编码为一个*,实现动态控制

'this is %d %s bird' % (1, 'dead')>>> "%f, %.2f, %.*f" % (1/3.0, 1/3.0, 4, 1/3.0)'0.333333, 0.33, 0.3333'#基于字典的字符串格式化, 引用字典键提取相应的值>>> "%(n)d %(x)s" % {"n" : 1, "x" : "apple"}'1 apple'#配合vars()食用更佳 :)

字符串格式化调用方法:format

这种格式化方法是通过位置或关键字指出要被替换的目标及将要插入的参数,起到占位符的作用。

>>> '{0}, {1} ans {2}'.format('aaa', [1, 2, 3], 123)'aaa, [1, 2, 3] ans 123'>>> '{0}, {month} ans {food}'.format('egg', month=3, food=[1, 2])'egg, 3 ans [1, 2]'

更高级的用法:通过位置或关键字引用对象的属性

>>> import sys>>> 'my {1[keyname]} run {0.platform}'.format(sys, {'keyname':'laptop'})'my laptop run win32'>>> 'my {config[keyname]} runs {sys.platform}'.format(sys=sys, config={'keyname':'laptop'})'my laptop runs win32'#还可以指定列表(或者其它序列)的偏移量进行索引>>> 'first={0[0]}, third={0[2]}, last={1[1]}'.format([11, 22, 33], "use")'first=11, third=33, last=s'

更具体的格式化:
在替换对象的标识之后用一个冒号,后面跟着可以指定字段大小、对齐方式等的一个格式化声明,其形式化结构如下:
{fieldname !convertionflag : formatspec}
* fieldname: 标识替换对象的一个数字或关键字
* conversionflag: 可以是r, s , a对应repr, str, ascii函数在该值上的一次调用。
* formatspec: 指定位宽,对齐方式,补零,小数点精度

formatspec组成形式描述如下:
[[fill]align][sign][#][0][width][,precision][typecode]
align:可以是<, >, ^分别表示左对齐,右对齐,居中对齐
#:在八进制数前显示0,十六进制数前显示0x或者0X
0 :填充0而不是空格
precision:小数点位数
typecodeo, x, d, b八进制,十六进制,十进制,二进制…

>>> '{0:<5}|{1:>5}|{2:^5}'.format(123, 123, 123)'123  |  123| 123 '>>> '{0:e}, {1:.3e}, {2:g}'.format(math.pi, math.pi, math.pi)'3.141593e+00, 3.142e+00, 3.14159'>>> '{0:x}, {0:o}, {0:b}, {0:d}'.format(255)'ff, 377, 11111111, 255'>>> '{0:.{1}f}'.format(1/3, 5)'0.33333'>>> '{!s}, {!r}, {!a}'.format(333, 444, 555)'333, 444, 555'>>> '{0:#10x}'.format(15)'       0xf'
0 0