Python学习笔记六·字符串的格式化
2018-04-25 本文已影响0人
ReiChin_
在Python中我们采用format % value
的方式格式化字符串。格式化操作符%
的左边是要被格式化的字符串,右边需要的操作数。format
中我们可以使用%s
、%d
、%f
等转换说明符来说明想要得到什么样的转换结果,当value
有多个值时,最好用()
将其包裹在一起。
基本转换说明符由下面的4个部分组成。
- %字符(必须):标记转换说明符的开始。
-
转换标识(可选):
-
表示左对齐,+
表示在转换值之前要加上正负号,空白字符
表示正数之前保留空格,0
表示转换值若位数不够则用0
填充。 -
最小字段宽度(可选):转换后的字符串至少应具有该值指定的宽度。如果是
*
则在元组中读取。 -
精度(可选):放在(.)后。如果转换的是实数,精度值就表示出现在小数点后的位数,如果转换的是字符串,则表示最大字段宽度。如果是
*
则在元组中读取。 - 转换类型(必须):参照下表。
转换类型 | 含义 |
---|---|
d,i | 带符号的十进制整数 |
o | 不带符号的八进制 |
u | 不带符号的十进制 |
x | 不带符号的十六进制(小写) |
X | 不带符号的十六进制(大写) |
e | 科学计数法表示的浮点数(小写) |
E | 科学计数法表示的浮点数(大写) |
f,F | 十进制浮点数 |
C | 单字符(接受整数或者单字符字符串) |
r | 字符串(使用repr转换任意Python对象) |
s | 字符串(使用str转换任意Python对象) |
接下来我们具体的探讨转换说明符的使用。
一、简单用法
print "小明的身高:%dcm" % 180
print "10的八进制:%o" % 10
print "10的十六进制:%X" % 10
import math
print "π:%f" % math.pi
print "用str格式化:%s" % 55L
print "用repr格式化:%r" % 55L
image.png
二、宽度和精度
print "%.5s" % 'Hello Python!' # 取字符串的前5个字符
import math
print "π:%.2f" % math.pi # 保留2位小数
print "π:%010f" % math.pi # 长度为10位,不够用0填充
print "π:%010.2f" % math.pi # 长度为10位,保留2为小数,长度不够用0填充
image.png
总长度和精度也可以用
*
表示,此时的数据从元组中读取。
print "%.*s" % (5, 'Hello Python!') # 取字符串的前5个字符
import math
print 'π:%+0*.*f' % (10, 2, math.pi) # 长度为10位,保留2为小数,长度不够用0填充,加正负号
image.png
三、映射变量
在字符串中我们可以使用%(key)
的形式,来映射字典中的value
。
user_dict = {'name' : '张三', 'num' : 666}
message = '%(name)s,欢迎您!您是我们的第%(num)d位用户。'
print message % user_dict
image.png
四、实战·打印超市购物小票
width = 46 # 总宽度
price_width = 12 # 单价宽度
count_width = 12 # 数量宽度
subtotal_width = 6 # 小计宽度
item_width = width - price_width - count_width - subtotal_width
header_format = '%-*s%-*s%-*s%*s' # 表头
item_format = '%-*s%-*.2f%-*s%*.2f' # 内容
total_format = '%-*s%*.2f' # 合计
print '=' * width
print header_format % (item_width, '名称', price_width, '单价', count_width, '数量', subtotal_width, '小计')
print '-' * width
print item_format % (item_width, '苹果', price_width, 8.88, count_width, 2, subtotal_width, 8.88 * 2)
print item_format % (item_width, '鸡蛋', price_width, 10.56, count_width, 1.76, subtotal_width, 10.56 * 1.76)
print item_format % (item_width, '牙膏', price_width, 15.9, count_width, 1, subtotal_width, 15.9 * 1)
print '-' * width
print total_format % (width - subtotal_width, '合计:', subtotal_width, 52.25)
print '=' * width
image.png