7.5 string的格式化
string支持对数据的格式化,使得字符串能够按照某种格式显示出来。格式化字符串在服务器后台开发中可能还常用一些,在命令行的模式下,只能通过string的格式化使得输出的内容显得更规整一些。
在python中,string的format方法和系统的%操作都可以让string格式化,这里只介绍string的format方法。因为据说%操作会被干掉的。
string类型使用{}来表示占位符。format方法的参数会遵循某些规则来替换{}以及它里面的内容。
下面的例子当中,字符串中的两个{}表示了两个占位符;而format的参数1和2就是两个要替换的字符串(其实是数字,不过会自动转成字符串的。)
>>> '{} and{}'.format(1,2)
'1 and 2'
可以看到上面的代码中,参数1和2分别替换了两个{}占位符。
如果字符串里面本来有'{','}'这两个字符,则需要使用'{{'来表示'{',同样的,用'}}'来表示'}'。
format()的参数的数目是可变的,爱给它输入几个参数就输入几个参数。format的参数都有序号,第一个参数的序号是,第二个参数的序号是1,一次类推。
{}占位符中可以指定替换的参数序号,如果不指定的话,系统会默认按出现顺序从0号参数开始替换。上面的代码中{}占位符就没有指定使用哪个序号的参数来替换,所以系统默认0号参数替换了第一个占位符,1号参数替换了第二个占位符。
下面的例子当中,第一个{}占位符指定要1号参数来替换,第二个{}占位符指定要0号参数来替换。
>>> ' and'.format(1,2)
'2 and 1'
可以看到上述代码有了不一样的效果。
format()方法接受key参数。此时{}占位符可以通过key来指定参数。这个本来应该是函数一章的内容了,这里先演示一下。
以下的代码中format有两个参数,一个是key为a1的参数,另一个是key为a2的参数。而{}占位符中可以指定不同key值的参数来替换它。
>>> ' and'.format(a1=1,a2=2)
'1 and 2'
如果format()的参数是list和dict类型的,{}占位符也可以通过序号、key等来获取。下面演示了format的参数是一个list,而第一项{}占位符取list的第一项、第二项{}占位符取list的第二项。
>>> nl=[1,2,3]
>>> ' and and '.format(nl)
'1 and 2 and 3'
format接受的参数类型可能是五花八门的,可能是一个列表,甚至可能是一个函数。此时可能需要调用stri()或者repr()来把它转化为一个字符串。此时可以在 {}占位符中加入!s或者!r来进行转换。下面的代码就展示了使用!s操作来进行str(nl)。
>>>''.format(nl)
'[1, 2, 3]'
上面的内容都是在讲{}占位符如何指定参数以及对参数进行类型转换的。下面的内容主要是{}占位符中怎么定义数字的格式。
数字格式的定义以 ':' 号开始。碰到了': '字符就知道要定义一个数字的显示格式了。格式的定义顺序为
[对齐方式(>右对齐、
[+/-符号]
[#进制声明(具体是哪个进制在类型定义)]
[0填充]
[整数宽度]
[ ,千位分隔符]
[ .小数宽度]
[类型(b二进制、d十进制、x十六进制、f浮点数、%百分数、e科学计数法等等)]
这八种定义可以单个出现,也可以三三两两出现,也可以全部都出现。一般按照情况选取几种格式就可以了。不要搞得太复杂了,以免看着眼花。
下面的例子是数字右对齐,整数宽度是10.
>>>''.format(9)
' 9'
下面的例子是居中对齐,整数宽度是10,进制是16进制。
>>>''.format(30)
' 0x1e '
下面的例子是小数宽度为2,并且使用百分数的形式.
>>> ''.format(3.1415926)
'314.16%'
下面的例子是进行0填充,整数宽度为6,十进制表示.
>>>''.format(25)
'000025'
下面的例子是对数据添加千位分隔符。
>>>''.format(123456789)
'123,456,789'
领取专属 10元无门槛券
私享最新 技术干货