字符串格式化操作
我们经常会输出类似“你好,XXX,你这个月的工资时XXX元!”的字符串,其中,“XXX”的内容是根据变量变化的的,因此,需要一种简便的格式化字符串的方式。
字符串格式化的操作有两种方式:使用符号%
进行格式化、使用format()
方法进行格式化。下面就来详细介绍一下这两种格式化。
使用符号“%”进行格式化
在Python中使用符号“%”进行格式化的形式与C语言类似,其一般形式为:
“%[标志][0][输出最小宽度][.精度]格式字符”%变量
。
其中,方括号[]中的项为可选项,也可以表示为:
“%[±][0][m][.n]格式字符”%变量
格式化各项的意义
- 标志
标志字符为”+“或者”-“,指定输出数据的对齐方式:指定”+“时,输出右对齐;指定”-“时,输出左对齐;不指定标志时缺省为”+“,默认右对齐。
- ”0“
0 | 显示的数字前面填充'0'而不是默认的空格 |
---|
- 输出最小宽度
用十进制整数m表示输出的最小位数。若实际位数大于定义的宽度,则按实际位数输出;若实际位数小于定义的宽度,则补空格或0(如在m前有数字0,则补0)。
- 精度
精度格式符以”.“开头,后跟十进制整数n。意义是:如果输出数字,则表示小数的位数;如果输出字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。
- 格式字符
格式字符用来表示输出数据的类型,各种格式字符及其功能说明如下:
格式字符 | 功能说明 | 格式字符 | 功能说明 |
---|---|---|---|
%s | 字符串(采用str()显示) | %o | 八进制整数 |
%r | 字符串(采用repr()显示) | %x | 十六进制整数 |
%c | 单个字符 | %f,%F | 浮点数 |
%% | 字符% | %e,%E | 指数(基底为e或E) |
%d,%i | 十进制整数 | %g,%G | 以%f或%e中较短的输出宽度输出浮点数 |
注意:%s和%r的主要区别在于%r可供编辑器使用和识别,而%s不能。
a = 15
b = 12345678.1234567
strs = "I love Python!"
print("a=%05d"%a) # 使用m控制输出位数为5的十进制整数,空位补0
print("b=%8.3f"%b) # 输出b,用m,n分别控制输出的长度为8,小数点位数为3的浮点数
print("%17s"%strs) # 使用m控制输出字符串长度为17
print("%17r"%strs) # 使用%r输出字符串
print("%-17.5s"%strs) # 使用m,n进行左对齐、限制字符串长度为17和字符位数为5
输出结果为:
a=00015
b=12345678.123
I love Python!
'I love Python!'
I lov[_*12]
注意:[ _*12]代表的是输出12个空格,这里由于不便于直观表述,故用此方法让大家理解。
使用format()方法进行格式化
使用format()方法也可以格式化字符串,其基本格式为:
模板字符串.format(逗号分隔的参数)
1、模板字符串是由一系列槽(用大括号表示)组成,用来控制字符串中嵌入值出现的位置,其基本思想是将format()方法中逗号分隔的参数按照序号替换到模板字符串的槽中(序号从0开始编号)。例如:
>>>"你好,{1},你这个月的工资是{0}元!".format(8500,张三)
'你好,张三,你这个月的工资是8500元!'
tips:{0}表示format括号里的第一个元素,{1}表示format括号里的第二个元素,依此类推。
2、如果大括号中没有序号,则按照出现顺序替换,例如:
>>>"你好,{},你这个月的工资是{}元!".format(8500,张三)
'你好,8500,你这个月的工资是张三元!'
3、format()方法中模板字符串的槽除了包括参数序号外,还可以包括格式控制信息,此时槽的内部样式为:
{参数序号:格式控制标记}
其中格式控制标记用于控制参数显示时的格式,下表列出了可用的格式控制标记及其意义:
填充 | 对齐 | 宽度 | , | .精度 | 格式字符 |
---|---|---|---|---|---|
用于填充的单个字符 | <左对齐 >右对齐 ^居中对齐 | 输出宽度 | 数字的千位分隔符 | 浮点数小数部分精度或字符串最大输出长度 | 整数类型d,o,x,X,b,c 浮点数类型e,E,f,% |
tips:格式控制标记包括”填充"、“对齐”、“宽度”、“,”、“.精度”、”格式字符"6个可选字段,这些字段可以组合使用。
a=15
b=12345678.1234567
strs="I love Python!"
print("a={0:05}".format(a)) # 输出5位数字,空位补0(第一个0代表format括号内的第一个参数)
print("b={0:,.3f}".format(b)) # 输出b,用千分位分隔并保留3位小数
print("{0:*^30}".format(strs)) # 居中且使用*填充,输出长度为30
结果为:
a=00015
b=12,345,678.123
********I love Python!********