Python有两种格式化字符创的方式。我们简单地称为旧式和新式。这两种方式的格式化在Python2和Python3中都使用。
使用%的旧式格式化
旧式格式化的形式为:string % data
string 包含的是待插值的序列
转换类型
%s 字符串
%d 十进制整数
%x 十六进制整数
%o 八进制整数
%f 十进制浮点数
%e 以科学计数法表示的浮点数
%g 十进制或科学计数法表示的浮点数
%% 文本值%本身
一个字符串内的%s意味着此处需要插入一个字符串,字符串中出现%的次数需要与%之后所提供的数据个数相同,如果需要插入一个数据,直接将需要插入的数据置于%后即可,如果需要插入多个数据,则需要将它们封装进一个元组(以圆括号为界,逗号分开)
还可以在%和指定类型的字母之间设定最大和最小宽度、排版以及填充字符
str_a = 'test123'
float_f = 3.14
n = 42
print_str = 'str = %s float is = %f number is = %d' % (str_a, float_f, n)
print(print_str)
为每个变量设定最小域宽为10个字符,右对齐,左侧不够用空格填充
blank_str = '%10s%10f%10d' % (str_a, float_f, n)
print(blank_str)
左对齐
blank_str = '%-10s%-10f%-10d' % (str_a, float_f, n)
print(blank_str)
右对齐,并且将浮点数的精度限制在小数点后4位
>>> '%10.4s%10.4f%10.4d' % (s,f,n)
' hahh 3.1416 0056'
去掉最小域宽为10限制
>>> '%.4s%.4f%.4d' % (s,f,n)
'hahh3.14160056'
作为将域宽 字符宽度等设定作为参数
>>> '%*.*d%*.*f%*.*s'%(3,4,n,5,4,f,10,2,s)
'00563.1416 ha'
使用{}和format的新式格式化
在python3中,使用新式格式化
>>> '{},{},{}'.format(n,f,s)
'678,1.242527,tecalgur'
自定义显示顺序
>>> '{2},{1},{0}'.format(f,s,n)
'678,tecalgur,1.242527'
上面的程序中 {2}代表显示数组第3个 {1}代表显示数组第2个 {0}代表显示数组第1个
参数可以是字典或者变量,个格式串中的标识符可以引用这些名称
>>> '{a},{b},{c}'.format(a = 's123',b=3.14,c=22)
's123,3.14,22'
指定参数格式
>>> '{0:d}+{2:f}+{1:s}'.format(a,c,b)
'44+3.131310+aaabbbccc'
设置最小域宽 右对齐
>>> '{0:10d}{1:10f}{2:10s}'.format(a,b,c)
' 44 3.131310aaabbbccc '
另一种方式右对齐
>>> '{0:>3f}+{2:>2s}+{1:2d}'.format(3.111,23,'wx')
'3.111000+wx+23'
左对齐
>>> '{0:<3f}+{2:<2s}+{1:<2d}'.format(3.111,23,'wx')
'3.111000+wx+23'