Python 3引入了一种新的方式来格式化字符串,这种方式也反向移植到了Python 2.7中。“新式”格式化字符串废除了%操作符这种特殊语法,使得格式化字符串更常规。通过在字符串对象上调用format()方法来格式化字符串。
format()方法要求字符串中待格式化的字符串用花括号“{}”占位:
- >>> score = 59
- >>> name = 'Ming'
- >>> # format()方法将score和name按顺序格式化,即score和name按顺序“填充”
- >>> '{} {}'.format(score, name)
- '59 Ming'
1、格式化数字
格式化数字时,如果不使用任何说明符,那么“{}”仅起到占位的作用,不会改变原本的数字:
- >>> '我的幸运数字是{}'.format(7)
- '我的幸运数字是7'
- >>> '圆周率约等于{}'.format(3.14)
- '圆周率约等于3.14'
“:d”说明符用于将数字转换成整数,如果提供的数字无法转换成整数(如浮点数),Python解释器将会报错:
- >>> '{:d}'.format(7)
- '7'
- >>> '{:d}'.format(3.14)
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- ValueError: Unknown format code 'd' for object of type 'float'
“:f”说明符用于将数字转换成浮点数,“新式”格式化字符串的方式也可以指定浮点数位数:
- >>> '{:f}'.format(3.14) # 默认位数为小数点后6位
- '3.140000'
- >>> '{:.2f}'.format(3) # 指定为小数点后2位
- '3.00'
当小数位数超出指定的位数时,会以四舍五入的形式舍弃后面的小数:
- >>> '{:.5f}'.format(3.1415926) # 保留小数点后5位
- '3.14159'
- >>> '{:f}'.format(3.1415926) # 默认保留小数点后6位
- '3.141593'
可以使用正号“+”来显式指出数字为正,当数字为负数时,不需要使用多余的符号:
- >>> '{:+d}'.format(7)
- '+7'
- >>> '{:d}'.format(-7)
- '-7'
使用“:,”进行格式化,会将数字的每三位加一个逗号:
- >>> '{:,}'.format(123456789)
- '123,456,789'
2、格式化字符串
当需要格式化多个字符串时,format()方法的参数需要用逗号隔开:
- >>> '{} {} {}'.format(7, 'Ming', 3.14)
- '7 Ming 3.14'
它们本质上是元组数据类型,并且元组中包含的每个项都可以通过其索引号(索引号从0开始)进行调用。可以将这些索引号传递到用作原始字符串中占位符的“{}”中:
- >>> '{0} {1} {2}'.format(7, 'Ming', 3.14) # 0 1 2 为默认顺序
- '7 Ming 3.14'
- >>> '{2} {1} {0}'.format(7, 'Ming', 3.14) # 将顺序调整为2 1 0
- '3.14 Ming 7'
- >>> '{2} {0} {1}'.format(7, 'Ming', 3.14) # 将顺序调整为2 0 1
- '3.14 7 Ming'
3、使用字符串名称
可以在占位符的“{}”中填入待格式化的字符串名称,这样可以使原始字符串看起来更加清晰:
- >>> '{name}的分数是{score}'.format(name='Ming', score=88)
- 'Ming的分数是88'
4、填充和对齐
可以通过附加参数增加字符串长度来填充字符串,或者在字符串周围创造“空间”。当需要可视化地组织大量数据时,这会很有用,下面是一些例子:
- >>> '{:10}'.format('Ming') # 10代表字符串一共占用10个字符
- 'Ming '
- >>> '{:>10}'.format('Ming') # >使字符串右对齐,一共占用10个字符
- ' Ming'
- >>> '{:^10}'.format('Ming') # ^使字符串居中,一共占用10个字符
- ' Ming '
除了用空格填充字符串外,还可以用其他字符来填充字符串:
- >>>
- >>> '{:_<10}'.format('Ming') # 使用_填充字符串,<使字符串左对齐
- 'Ming______'
- >>> '{:s<10}'.format('Ming') # 使用s填充字符串,<使字符串左对齐
- 'Mingssssss'
- >>> '{:_>10}'.format('Ming') # 使用_填充字符串,>使字符串右对齐
- '______Ming'
- >>> '{:_^10}'.format('Ming') # 使用_填充字符串,^使字符串居中
- '___Ming___'
在格式化数字时,也可以填充字符串:
- >>> '{:10d}'.format(59)
- ' 59'
- >>> # 6代表一共占用6个字符,0代表使用0填充,2代表保留小数点后2位
- >>> '{:06.2f}'.format(3.14159265)
- '003.14'
5、截断长字符串
“.”用于将字符串截断成指定长度:
- >>> '{:.4}'.format('Xiao Ming') # 截断成4位字符串
- 'Xiao'
- >>> '{:8.4}'.format('Xiao Ming') # 截断成4位字符串,一共占用8个字符
- 'Xiao '