帅儿二郎

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Python字符串格式化的方式主要有两种,一是使用字符串操作符,即%,二是使用内嵌函数format()。

字符串操作符%

理论

字符串操作符主要由5部分组成,分别为

  1. %:标志转换说明符的开始。
  2. 转换标志(可选):-表示左对齐;+表示在转换值之前加上正负符号;“ ”(空格)表示正数前保留空格;0表示转换的值若位数不够则用0填充。
  3. 字段宽度(可选):指定转换后字符串占用的最少宽度,如果是*,宽度则会从元组中读出。
  4. 点(.)后跟精度值(可选):如果转换的是实数,精度值表示小数点后的位数。如果转换的是字符串,那么该数值就表示最大字段宽度。如果是*,精度将从元组中读出。
  5. 转换类型:见下表
转换类型 含义
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部分组成,分别为

  1. {:}:标志转换开始。
  2. 转换标志(可选):^,<,> 分别是居中、左对齐、右对齐;+ 表示在正数前显示 +,负数前显示 -。
  3. 字段宽度(可选):指定转换后字符串占用的最少宽度。
  4. 点(.)后跟精度值(可选):如果转换的是实数,精度值表示小数点后的位数。如果转换的是字符串,那么该数值就表示最大字段宽度。

字符串转换实例

>>> "小明是{}年级{}班的同学。".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)



 

posted on 2020-08-21 01:06  帅儿二郎  阅读(204)  评论(0)    收藏  举报