Python字符串格式化

Python表达式格式化包括表达式格式化和格式化调用。
1. 表达式格式化

在运算符%左侧为要格式化的字符串表达式,右侧为格式化的对象。例如:
example = 'abcd'
'the knights who say %s!' % example # 结果为the knights who say abcd!
'%d %s you,%s,%s,%s' % (1, 'is',(1,'a'),['sp',2],{1:11,'a':'15'}) # 结果为1 is you, (1,'a'),['sp',2],{1:11,'a':'15'},%右侧多个对象时候使用括号(也就是放入元祖中,一个元素也可以放入元祖),其中%d表示整数,%s表示字符串,这些是目标格式,也就是要把对象转化为的格式,因为每个类型的对象都能转为字符串,所以每个对象都可以使用%s格式。%s使用str(x)转换,%r使用repr(x)转换。
表达式格式化的通用结构如下:
%[(name)][flags][width][.precision]<typecode>
分别表示:放置一个字典的键(?),罗列出左对齐(-)、正负号(正数时默认省略+,如果显示用+,不影响负数)和补零的标志位,数字的整体长度,小数点后的位数。其中typecode是%d,%s中的d和s。例如:
x = 123
y = -123
'int _1:%-5d...int_2:%+5d...int_3:%05d...int_4:%-5.2d/' % (x, y, x,x) # 返回int _1:123  ...int_2: -123...int_3:00123...int_4:123  /,看到小数位数对整数无效
x = 1.23456789
y = 1.23456789E5
z = 1.23456789E6
'%f|%e%E%g%G' % (x,x,x,y,z) # 结果为1.234568|1.234568e00|1.234568E00|123457|1.23457E6,f和F都表示普通的浮点数(默认6位小数?),e和E表示E记法表示的,两个不同是E的大小写,g和G是自动执行E记法(默认6个有效数字?),不同是大小写。
width和precision可以用*来动态指定大小,这时*也会从表达式右侧读取一个对象。例如:
'%f,%.*f' % (1 / 3, 4, 1 / 3) # 结果为0.333333,0.3333
values = {'name':'spam',1:11}
'%(name)s' % values # 结果为spam,1这个键无法使用表达式格式化,这里的键需要为字符串?vars()函数会将最近的变量和值生成一个字典对象。
2. 格式化调用
format方法是格式化专用方法,功能强大,可代替格式化表达式。可以使用位置和关键字指定替换目标(但是位置参数必须在前面,关键字参数在后面)。例如:'{name} and {0}'.format('xxm', name = 'zhangsan')结果为zhangsan and xxm。
此方法支持格式化的字符串中使用点加属性和方括号加偏移量键值的方式。但方括号中不能使用表达式,所以负偏移不可以。例如:
import sys
'%[1[spam],{0.platform},{sys.platform},{d[0]}'.format(sys,{'spam':'abc'},sys=sys,d=['xxm']) # 结果为:abc,linux,linux,xxm。
parts = ('abc','xxm') # 等效于'abc','xxm'
'{0},{1}'.format(*parts) # 这是正确的。这种把元祖转为参数传递了?
在一个格式化字符串中作为替代目标出现的形式化结构如下:
{fieldname[!conversionflag][:formatspec]}
其中fieldname是前面使用的都是fieldname,指定参数的一个位置数字,关键字(带有属性和[]的引用)。conversionflag可以取s(默认?),r,a,分别表示调用内置函数str,repr,ascii。formatspec指定展示格式,包括字段宽度、对齐方式、补零、小数点位数,并且可以以一个可选的数据类型编码结束,其格式如下:
[[fill]align][sign][#][0][width][.precision][typecode]
align可能是<、>、=、^,分别表示左对齐、右对齐、一个标记字符后的补充和居中对齐。后面的和表达式格式化中使用类似,typecode这里多了一个b表示二进制,少了i和u。formatspec也支持嵌套,动态获取参数指定格式(类似表达式格式化中的*)。[.precision]在python3.1中新增了逗号(,)可以格式千分隔位。
例如:
'{0:06.2f},{1:X},{2:.{3}f}'.format(1.23456789, 255, 1 / 3, 4) # 返回001.23,FF,0.3333
参数前加**是一种特殊的用法,它能把键和值的一个字典对象包装到单个的name=value关键字参数中,例如:
data = dict(name = 'xxm', sex = 'male')
'{name},{sex}'.format(**data) # 返回xxm,male。
Python3.1的字符串方法format中的位置数字替换值变为可选的,自动相对计数。


Python有一个内置的format函数可以格式化一个单独的项,例如:
format(1.2345, '.2f') # 结果为1.23,格式化参数和上述的formatspec类似。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值