字符串格式化操作

我们经常会输出类似“你好,XXX,你这个月的工资时XXX元!”的字符串,其中,“XXX”的内容是根据变量变化的的,因此,需要一种简便的格式化字符串的方式。

字符串格式化的操作有两种方式:使用符号%进行格式化、使用format()方法进行格式化。下面就来详细介绍一下这两种格式化。

使用符号“%”进行格式化

在Python中使用符号“%”进行格式化的形式与C语言类似,其一般形式为:

“%[标志][0][输出最小宽度][.精度]格式字符”%变量

其中,方括号[]中的项为可选项,也可以表示为:

“%[±][0][m][.n]格式字符”%变量

格式化各项的意义
  1. 标志

标志字符为”+“或者”-“,指定输出数据的对齐方式:指定”+“时,输出右对齐;指定”-“时,输出左对齐;不指定标志时缺省为”+“,默认右对齐。

  1. ”0“
0 显示的数字前面填充'0'而不是默认的空格
  1. 输出最小宽度

用十进制整数m表示输出的最小位数。若实际位数大于定义的宽度,则按实际位数输出;若实际位数小于定义的宽度,则补空格或0(如在m前有数字0,则补0)。

  1. 精度

精度格式符以”.“开头,后跟十进制整数n。意义是:如果输出数字,则表示小数的位数;如果输出字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。

  1. 格式字符

格式字符用来表示输出数据的类型,各种格式字符及其功能说明如下:

格式字符 功能说明 格式字符 功能说明
%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!********
posted @ 2021-10-11 19:22  Cara_Smith  阅读(1157)  评论(0编辑  收藏  举报