python3字符串格式化的方法

python中使用百分号来引导字符串格式化。%的左边是待格式化字符串,右边是希望格式化的值。如果希望格式化的值不止一个,则百分号应该使用多个值的元组或字典来表示(如果使用列表或者其它序列代表元组,那么序列会被当做一个值,达不到多个值的效果),并且每个值都对对应字符串中的一个转换说明符%,位置要对应;若采用字典来控制格式化的话,则更灵活

1、元组的格式化字符串

基本的转换说明符包括以下几个部分:

(1)字符串内的%字符:字符串中%标志转换说明符的开始

(2)填充及对齐标志(可选):“-”表示左对齐(在格式化内容的长度小于最小长度时)不够的位数在后面用空格补充;“+”、“”(空格)、“0”表示若位数不够则在前面用“”(空格)填充。

(3)最小字段宽度(可选):(最小字符串宽度)转换后的字符串的最小长度,若不够则在字符串前补充空格,若长度超出给定的值则按实际长度

(4)“.”后跟精度值(可选):如果转换的值是实数,则精度值就是小数点后的位数,如果转换的是字符串,那么该字符串的最大字符串长度就由该精度值指定。

(5)转换类型:

转换类型 含义
s 将%右边的格式化值转换成字符串(可理解为对其使用str()函数)
d,i,u 将格式化值(此时该值应该是数值类型,取该值的整数部分)转换成带符号的整数
r 对格式化值使用repr()函数得到的字符串
u 不带符号的十进制数
o 将%右边的整数转换成带符号的八进制数
x 将%右边的整数转换成带符号的十六进制数,10-a,11-b...
X 将%右边的整数转换成带符号的十六进制数,10-A,11-B...
e 将浮点数转化成科学计数法表示,用小写e分隔
E 将浮点数转化成科学计数法表示,用大写E分隔
f,F 将数值转化为十进制浮点数表示
c 接受一个字符或数值(试了一下,数值在1-160之间结果是其16进制表示)

2、字典的格式化字符串

在待格式化的字符串中的转换说明符后面加上“(key)”,字符串外边接“%DictName”,则待格式化的字符串中的格式化部分替换成了“value”,这种情况试了下,好像是使用的key都必须是字符或者字符串类型,且在%()中该key不加引号标注。

>>> x="da%-10.13sjia%-10.2f"
>>> x%("sdafasdf",12.32131)
'dasdafasdf  jia12.32
#待格式化字符串内部的%领衔的五部分格式化控制:百分号、填充和对齐、精度、类型。
#这一部分内容对字典和元组都适用
>>> a
{(1, 2): 12, 1: 'we', 'c': [1, 2, 3], 'd': 'us'}
>>> b
'ni%(d)-10shao'
>>> b%a
'nius        hao       ‘
>>> b='ni%(c)-10shao'
>>> b%a
'ni[1, 2, 3] hao'    #整个列表内容算上[,逗号,空格,长度为9

>>> b='ni%(1)-10shao'   #若果关键字为非字符类型,则结果出错
>>> b%a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: '1'

所以,在用字典格式化字符串的时候需要主要,所使用的字典关键字是字类型,其value也需要注意。

3.使用format方法

这种情况则是用一对花括号取代了%引导格式化,但本人目前对其格式控制不是很熟悉。

花括号引导,若括号内为空,则format的参数和花括号一一对应
>>> a="ni{}hao{}a?"
>>> a.format("_jin_","_hua_")
'ni_jin_hao_hua_a?'

花括号内为索引号,则有几个不同的索引,则format就有几个参数(或者说是一个长度对应的元组更贴切)
>>> a="ni{1}hao{0}a?"
>>> a.format("_jin_","_hua_")
'ni_hua_hao_jin_a?'

参数可以是一个对象,但此时获取参数的内容时要注意是对该对象的部分进行获取还是整个对象
>>> b=["hello","world"]

参数是整个对象
>>> a.format("_jin_",b)
"ni['hello', 'world']hao_jin_a?"

参数是对象的部分元素
>>> "ni{1[0]}__hao{0}__".format(123,b)
'nihello__hao123__'

花括号内是关键字,format的参数可以是对应的关键字赋值,也可以是包含了相应关键字的字典
>>> "{k1}-{k2}".format(k2=10,k1=15)
'15-10'
>>> dic={'k2':20, 'k1':13}
>>> "{k1}-{k2}".format(**dic)  #哪怕dic字典中不值k1,k2两个key,这种也是没问题的
'13-20'

猜你喜欢

转载自blog.csdn.net/Muyan_Donny/article/details/81746197