Python字符串格式化的方式主要有两种,一是使用字符串操作符,即%,二是使用内嵌函数format()。
字符串操作符%
理论
字符串操作符主要由5部分组成,分别为
- %:标志转换说明符的开始。
- 转换标志(可选):-表示左对齐;+表示在转换值之前加上正负符号;“ ”(空格)表示正数前保留空格;0表示转换的值若位数不够则用0填充。
- 字段宽度(可选):指定转换后字符串占用的最少宽度,如果是*,宽度则会从元组中读出。
- 点(.)后跟精度值(可选):如果转换的是实数,精度值表示小数点后的位数。如果转换的是字符串,那么该数值就表示最大字段宽度。如果是*,精度将从元组中读出。
- 转换类型:见下表
| 转换类型 | 含义 |
| d,i | 带符号的十进制整数 |
| o | 不带符号的八进制 |
| u | 不带符号的十进制 |
| x | 不带符号的十六进制(小写) |
| X | 不带符号的十六进制(大写) |
| e | 科学计数法表示的浮点数(小写) |
| E | 科学计数法表示的浮点数(大写) |
| C | 单子符(整数或者单字符) |
| r | 字符串(使用repr转换) |
| s | 字符串(使用str转换) |
举例
字符串转换
>>> "My name is %s" % "ys" 'My name is ys'
十进制整数转换
>>> "您有%u封邮件未查收!" % 42 '您有42封邮件未查收!'
浮点数转换
>>> from math import pi >>> "Pi is %f" % pi 'Pi is 3.141593'
带精度的浮点数转换
>>> "Pi is %.3f" % pi #限制pi的精度为小数点后三位,第四位进行四舍五入。 'Pi is 3.142'
>>> "Pi is %.*f" % (3,pi) #与上面的一个的区别在于使用元组设置精度
'Pi is 3.142'
指定字段转换后占用最少宽度的转换
>>> "您有%4u封邮件未查收!" % 42 #设置转换后的字段宽度最少为4 '您有 42封邮件未查收!'
>>> "您有%*u封邮件未查收!" % (4,42) #与上面的一个的区别在于使用元组设置宽度
'您有 42封邮件未查收!'
指定转换后的字段为左对齐
>>> "您有%-4u封邮件未查收" % 42 #设置转换后的字段为最对齐 '您有42 封邮件未查收'
format()
理论
Python2.6 开始,新增了格式化字符串函数format(),它增强了字符串格式化的功能。基本语法是通过{}和:来代替以前的 % ,相较于%的优势format()可以接受不限个参数,参数位置也可以不按顺序。
format()与%一样,也是由5部分组成,分别为
- {:}:标志转换开始。
- 转换标志(可选):^,<,> 分别是居中、左对齐、右对齐;+ 表示在正数前显示 +,负数前显示 -。
- 字段宽度(可选):指定转换后字符串占用的最少宽度。
- 点(.)后跟精度值(可选):如果转换的是实数,精度值表示小数点后的位数。如果转换的是字符串,那么该数值就表示最大字段宽度。
字符串转换实例
>>> "小明是{}年级{}班的同学。".format("三",2) #使用位置参数格式化 '小明是三年级2班的同学。'
>>> "我的名字是{name},今年{age}岁。".format(age=30,name="ys") #使用关键字参数格式化,无需考虑变量位置
'我的名字是ys,今年30岁。'
>>> user_list = ['ys',30]
>>> '我的名字是{0[0]},年龄是{0[1]}。'.format(user_list) #使用列表索引作为参数,注意{0}是必须要有的
'我的名字是ys,年龄是30。'
>>> user_dic = {'name':'ys','age':30} #使用字典作为参数进行字符串格式化
>>> '我的名字是{name},年龄是{age}。'.format(**user_dic)
'我的名字是ys,年龄是30。'
数字串转换实例
| 参数 | 命令 | 结果 | 描述 |
|---|---|---|---|
| pi | '{:.3f}'.format(pi) | 3.142 | 保留小数点后 三位,第四位进行四舍五入。 |
| pi | {:+.3f}'.format(pi) | +3.142 | 带符号保留小数点后三位 |
| -pi | '{:+.3f}'.format(-pi) | -3.142 | 带符号保留小数点后三位 |
| pi | ‘{:.0f}'.format(pi) | 3 | 不带小数,小数第一位进行四舍五入 |
| 5 | ’{:0>2}'.format(5) | 05 | 数字补零 (右对齐、 宽度2、左侧0填充) |
| 5 | '{:x<4}'.format(5) | 5xxx | 数字补x (左对齐、宽度4、右侧x填充) |
| 5 | '{:x<4d}'.format(5) | 5xxx | 数字补x (左对齐、宽度4、右侧x填充) |
| 1000000 | '{:,}'.format(1000000) | 1,000,000 | 以逗号分隔的数字格式 |
| 0.25 | '{:.2%}'.format(0.25) | 25.00% | 百分比格式 |
| 1000000000 | '{:.2e}'.format(1000000000) | 1.00e+09 | 指数记法 |
| 13 | '{:>4}'.format(13) | 13 | 右对齐 (默认, 宽度为4) |
| 13 | '{:<4}'.format(13) | 13 | 左对齐 (宽度为4) |
| 13 | '{:^4d}'.format(13) | 13 | 居中 (宽度为4) |
浙公网安备 33010602011771号