格式化输出有几种方式¶
常见的有三种方法来格式化字符串,分别为:
- %格式化字符串,
- 字符串方法format,
- F字符串。
例如:
name="openwrt"
print('book name is %s' % name) #%
print('book name is {}'.format(name)) #format
print(f'book name is {name}') #f字符串
首先我们来学习一下用百分号格式化输出。
%格式化字符串(printf风格)¶
“%”是Python风格的字符串格式化操作符,非常类似C语言里的printf()函数的字符串格式化。 他对字符串进行操作,然后返回一个字符串。以format % values 形式进行计算,format是 一个字符串,其中包含要输出的对象占位符和格式。格式的%转换规范被替换为零或更多的 值元素。
示例:
#格式化输出字符串,整型和浮点型
>>> print('book name is %s, price is %d, read %f' % ("openwrt", 69, 1/3) )
book name is openwrt, price is 69, read 0.333333
还可以控制输出的格式, 例如精度,占用的字符宽度等等
print('read %.2f’ % 1/3) #控制输出小数点后占两位
print('read %10d’ % 69) #控制输出宽度为10
print('%02d' % 5) #至少占用两个字符位置,不足前面补零
print('book name is %15s' % "openwrt") #控制宽度占15个字符位置
转换说明符包含两个或多个字符,并具有以下组件,必须以这个顺序出现:
1, “%”字符,标志着转换说明符的开始。
2, 映射键(可选),由一个括号的字符序列组成(例如,(somename))。
3, 转换标志(可选),它影响某些转换类型的结果。
4, 最小宽度(可选)。如果指定为’*’(星号),则实际的宽度将从值的元组的下一个 元素中读取,并且在最小字段宽度和可选精度之后转换。
5, 精度(可选),作为一个”.”(点)接着是精度。如果指定为’*’(星号),则从值的 元组的下一个元素读取实际的精度,并在精度之后进行转换。
6, 长度修改器(可选)。
7, 转换类型。
常见的转换类型有:
========= ===================
转换字符 含义
========= ===================
'd' 整型数字
'i' 有符号整型数字
'o' 八进制数据
'x' 十六进制数据
'f' 浮点型数据
's' 字符串
========= ===================
详细内容,请参考https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting
printf风格的字符串输出已经不建议使用,请使用最新的 f字符串 来替代该功能。
字符串方法format¶
format方法原型为:
str.format(*args, **kwargs)
* args表示可以传递任意个位置参数,他根据位置来决定参数的含义及使用。
* kwargs表示关键字参数, 以key=value形式进行传递参数。
str.format()函数执行字符串格式化操作。该方法所调用的字符串可以包含文本或替换字段, 由括号{}分隔。每个替换字段包含一个位置参数的数值索引,或者一个关键字参数的名称。 它返回一个新的字符串的副本,其中每个替换字段替换为相应参数的字符串值。例如:
>>> name="beijing"
>>> "hello {k1}".format(k1=name)
'hello beijing'
>>> "hello {0}".format(name)
'hello beijing'
替换字段格式为”{” [field_name] [“!” conversion] [“:” format_spec] “}” 包含三部分:
- field_name开始,该字段指定要格式化的对象,并将其插入到输出中。 field_name是可选的。
- 后面是一个转换字段,前面是一个感叹号!。
- 最后有一个format_spec,前面是冒号’:’。这些指定了替换值的非默认格式。
在括号里面,可以指定参数的格式化方式。他是用冒号“:”开始来指定格式化方式。
print('read {:.2f}'.format(1/3)) #控制输出小数点后占两位 read 0.33
print('read {:10d}'.format(69)) #控制输出宽度为10
print('{:<8}'.format(69)) #右对齐,占用8个字符宽度
print('read {:02d}'.format(5)) #至少占用两个字符位置,不足前面补零
print('book name is {:>15}'.format("openwrt")) #右侧对齐,控制字符串宽度占15个字符