一、使用%:
在%的左侧放置一个字符串,右侧放置希望被格式化的值,可以使用一个值,也可以使用多个值,多个值用放在一个元组或字典里。
注意:如果使用列表或其它序列代替元组(或字典),那么序列会被解释为一个值。如果要在字符串里使用%,那么必须用%%表示。
name = 'donfag' age = 20 mystr = "My name is %s and I'm %d years old" % (name,age) print(mystr)View Code
返回结果:
My name is donfag and I'm 20 years old
如果要格式化实数(浮点数),可能使用f表示转换说明符的类型,同时提供所需的精度:一个句点再加上希望保留的小数位数。
from math import pi mystr = "Pi wiht three decimals:%.3f" % pi print(mystr)View Code
返回结果:
Pi wiht three decimals:3.142
相关说明:
1、%字符:
标记转换说明符的开始。
2、转换标志(可选):
- 表示左对齐。
+ 表示在转换值之前要加上正负号。
"" 表示正数之前保留空格。
0 表示转换值若位数不够则用0填充。
3、最小字段宽度(可选):
转换后的字符串至少应该具有该值指定的宽度。如果是*,则宽度会从值元组中读出。
4、点(.)后跟精度值(可选):
如果转换的是实数,精度值就表示出现在小数点后的位数。如果转换的是字符串,那么该数字就表示最大字段宽度。如果是*,那么精度将会从元组中读出。
5、转换类型:
d,i 带符号的十进制整数
o 不带符号的八进制
u 不带符号的十进制
x 不带符号的十六进制(小写)
X 不带符号的十六进制(大写)
e 科学计数法表示的浮点数(小写)
E 科学计数法表示的浮点数(大写)
f,F 十进制浮点数
g 如果指数大于-4或则小于精度值则和e相同,其它情况于f相同
G 如果指数大于-4或则小于精度值则和E相同,其它情况于F相同
C 单字符(接受整数或则单字符字符串)
r 字符串(使用repr转换任意python对象)
s 字符串(使用str转换任意python对象)
6、字段宽度和精度:
两个都是整数(首先是字段宽度,然后是精度),如果只给出精度,就必须包含点号,如:
"%10f" % pi #字段宽为10,不够的前面用空格补齐。结果是:' 3.141593'
"%10.2f" % pi #字段宽为10,精度为2。结果是:' 3.14'
"%.2f" % pi #精度为2。结果是:'3.14'
"%.6s" % "Donfag is good" #字段宽为6。结果是:'Donfag'
可以使用*作为字段的宽度或精度(或者两者都使用*号),此时数值会从元组参数中读出:
'%.*s' % (6,'Donfag is good') #字段宽为6。结果是:'Donfag'
'%*.*f' % (6,2,3.141592633) #字段宽为6,精度为2。结果是:' 3.14'
7、符号、对齐和用0填充:
在字段宽度和精度之前还可以放置一个“标志”,该标志可以是0、+、-或空格。0表示数字将会用0进行填充:
'%010.2f' % pi #结果为:0000003.14
减号(-)用来左对齐数值:
'%-10.2f' % pi #结果为:'3.14 '
空白("")是在正数前加上空格,这在需要对齐正负数时很有用:
print('%5d' % 10 + '\n' + '%+5d' % -10)
结果为:
' 10'
' -10'
加号(+)表示不管是正数还是负数都需要标示出符号:
print('%+5d' % 10 + '\n' + '%+5d' % -10)
结果为:
' +10'
' -10'
8、以下代码将使用星号字段宽度说明符来格式化一张包含水果价格的表格,表格总宽度由用户输入。
width = int(input("Please enter width:")) price_width = 10 item_width = width - price_width header_format = '%-*s%*s' format = '%-*s%*.2f' print('=' * width) print(header_format % (item_width,'Item',price_width,'Price')) print('-' * width) print(format % (item_width,'Apple',price_width,0.8)) print(format % (item_width,'Pears',price_width,0.4)) print(format % (item_width,'Cantaloupes',price_width,1.89)) print(format % (item_width,'Dried Apricots',price_width,10)) print(format % (item_width,'Prunes(3 lbs)',price_width,21))View Code
输出结果:
Please enter width:30
==============================
Item Price
------------------------------
Apple 0.80
Pears 0.40
Cantaloupes 1.89
Dried Apricots 10.00
Prunes(3 lbs) 21.00
二、使用format()函数:
Python2.6开始,新增了一种格式化字符串的函数str.format(),它增强了字符串格式化的功能。
字符串格式化:
>>>"{} {}".format("hello", "world") # 不设置指定位置,按默认顺序
'hello world'
>>> "{0} {1}".format("hello", "world") # 设置指定位置
'hello world'
>>> "{1} {0} {1}".format("hello", "world") # 设置指定位置
'world hello world'
也可以设置参数:
print("网站名:{name}, 地址 {url}".format(name="菜鸟教程", url="www.runoob.com"))
# 通过字典设置参数
site = {"name": "菜鸟教程", "url": "www.runoob.com"}
print("网站名:{name}, 地址 {url}".format(**site))
# 通过列表索引设置参数
my_list = ['菜鸟教程', 'www.runoob.com']
print("网站名:{0[0]}, 地址 {0[1]}".format(my_list)) # "0" 是必须的
数字格式化:
>>> print("{:.2f}".format(3.1415926))
3.14
数字 格式 输出 描述
3.1415926 {:.2f} 3.14 保留小数点后两位
3.1415926 {:+.2f} +3.14 带符号保留小数点后两位
-1 {:-.2f} -1.00 带符号保留小数点后两位
2.71828 {:.0f} 3 不带小数
5 {:0>2d} 05 数字补零 (填充左边, 宽度为2)
5 {:x<4d} 5xxx 数字补x (填充右边, 宽度为4)
10 {:x<4d} 10xx 数字补x (填充右边, 宽度为4)
1000000 {:,} 1,000,000 以逗号分隔的数字格式
0.25 {:.2%} 25.00% 百分比格式
1000000000 {:.2e} 1.00e+09 指数记法
13 {:>10d} 13 右对齐 (默认, 宽度为10)
13 {:<10d} 13 左对齐 (宽度为10)
13 {:^10d} 13 中间对齐 (宽度为10)
^, <, > 分别是居中、左对齐、右对齐,后面带宽度, : 号后面带填充的字符,只能是一个字符,不指定则默认是用空格填充。
+ 表示在正数前显示 +,负数前显示 -; (空格)表示在正数前加空格
b、d、o、x 分别是二进制、十进制、八进制、十六进制。
此外我们可以使用大括号 {} 来转义大括号,如下实例:
print ("{} 对应的位置是 {{0}}".format("runoob"))
输出结果为:
runoob 对应的位置是 {0}
三、在格式化的字符串前加前缀f:
Python3.6新增了一种f-字符串格式化,格式化的字符串文字前缀为’f’和接受的格式字符串相似str.format()。它们包含由花括号包围的替换区域。替换字段是表达式,在运行时进行评估,然后使用format()协议进行格式化。如:
name = 'Donfag' age = 20 print(f'My name is {name} and I am {age} years old')View Code
输出结果为:
My name is Donfag and I am 20 years old