格式化输出
目前遇到过两种从输出值的方法:表达式语句和print语句.(第三种方式时使用文件对象的write()方法;标准输出文件可以引用sys.stdout,详细内容见库参考手册)
有两种方法来设置输出格式:
第一种是自己做所有的字符串处理;使用字符串切片和连接操作,你可以创建任何你想要的布局.字符串类型有一些方法,用于执行将字符串填充到指定列宽度的又用操作.
第二种方法是使用str.format()方法.
string模块包含一个Template类,提供另外一种向字符串带入值的方法. 如何将值转换为字符串?Python提供了将任何值转换为字符串的方法:将值传递给repr()和str()函数.
Python提供填充空格使字符串在给定的列对其的方法
- str.rjust():在左侧填充空格使字符串在给定宽度的列右对齐
- str.center():在左右两侧填充空格使字符串在给定宽度的列居中对其
- str.ljust():左对齐
这些方法不会输出任何内容,它们值返回新的字符串.如果输入的字符串太长,它们不会截断字符串,而是保持原样返回;这会使列的格式变得混乱,但是通常好于另外一种选择,那可能是一个错误的值.(如果想要截断,可以加上一个切片操作,例如x.ljust(n)[:n])
另外一种方法str.zfill(),它向数值字符串左侧填充0,该函数可以正确识别重负好:
>>> '12'.zfill(5)
'00012'
>>> '-3.14'.zfill(7)
'-003.14'
>>> '3.14159265359'.zfill(5)
'3.14159265359'
str.format()方法的基本用法如下
花括号及其中的字符()称为格式字段)将被替换为传递给str.format()方法的对象.
>>> print 'We are the {} who say "{}!"'.format('knights', 'Ni')
We are the knights who say "Ni!"
括号中的数字指传递给str.format()方法的对象的位置.
>>> print '{0} and {1}'.format('spam', 'eggs')
spam and eggs
>>> print '{1} and {0}'.format('spam', 'eggs')
eggs and spam
如果str.format()方法使用关键字参数,那么将通过参数名称引用它们的值
>>> print 'This {food} is {adjective}.'.format(food='spam', adjective='absolutely horrible')
This spam is absolutely horrible.
字段名后允许可选的':'和格式指令.这允许更好地控制如何设置值的格式.
>>> import math
>>> print 'The value of PI is approximately {0:.3f}'.format(math.pi)
>>> The value of PI is approximately 3.14.
这个例子将pi转为3为精度.
':'后面跟一个整数可以限定盖子段的最小宽度.这在美化表格时十分又用
>>> table = {'Sjored':4217,'Jack':4098,'Dcab':7678}
>>> for name, phone in table.items():
... print '{0:10} ==> {1:10d}'.format(name, phone)
...
Jack ==> 4098
Dcab ==> 7678
Sjoerd ==> 4127
如果有一个很长的格式字符串但又不想分开写,要按名字而不是位置引用变量,那么可以传入一个字典,然后使用'[]'访问
>>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
>>> print ('Jack: {0[Jack]:d}; Sjoerd: {0[Sjoerd]:d}; '
... 'Dcab: {0[Dcab]:d}'.format(table))
Jack: 4098; Sjoerd: 4127; Dcab: 8637678
也可以用'**'符号将这个字典以关键字参数的方式传入
>>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
>>> print 'Jack: {Jack:d}; Sjoerd: {Sjoerd:d}; Dcab: {Dcab:d}'.format(**table)
Jack: 4098; Sjoerd: 4127; Dcab: 8637678
这种方式与内置函数vars()组合起来更为有用,该函数返回一个包含所有局部变量的字典.