format是python2.6新增的一个格式化字符串的方法,相对与旧版的%它有很多优点
1.不需要理会数据类型的问题,在%方法中%s只能替代字符串类型
2.单个参数可以多次输出,参数顺序可以不相同
3.填充方式十分灵活,对齐方式十分强大
4.官方推荐用的方式,%方式将会在后面的版本被淘汰
基本 填充
(1)顺序填充
与%类似,通过{ }占位然后顺序填充
print("Hello,My name is {}, and i am from {}.".format("Yz","China"))
Output:
Hello,My name is Yz, and i am from China.
(2)下标填充
我们在{ }中填充逻辑顺序来对应之后format中的字符串
print("Hello,My name is {1}, and i am from {0}.".format("China","Yz"))
Output:
Hello,My name is Yz, and i am from China.
值得注意的是:在此种填充中,必须在每个{ }都标上序号,包括下面将会看到的在填充空白字段那里,如果使用了下标,则必须全部标上,即要标全标,要不标都不标,否则会报错
错误示范:
print("Hello,My name is {1}, and i am from {}.".format("China","Yz"))#第一个空标了,但第2个空未标
Output:
Traceback (most recent call last):
File "E:/Pycharm Project/Crawler/Text.py", line 1, in <module>
print("Hello,My name is {1}, and i am from {}.".format("China","Yz"))
ValueError: cannot switch from manual field specification to automatic field numbering
报错:无法从手动字段指定切换为自动字段编号
(3)关键字填充
print("Hello,My name is {Name}, and i am from {Country}.".format(Country = "China",Name = "Yz"))
Output:
Hello,My name is Yz, and i am from China.
还有诸如通过对象属性填充、通过参数填充等方法暂且不述。
进阶: 对齐与输出长度
在{ }中添加:及其他数字和字符来完成对齐与指定输出长度
:> 右对齐
:<左对齐
:^居中对齐
在<>^后面添加数字来指定输出长度
精度与类型f
精度常跟类型f一起使用。
In[1]: "{:.2f}".format(3.1415926)
Out[1]: '3.14'
其中.2表示长度为2的精度,f表示float类型。
print("Hello,My name is {:>7}, and i am from {:>7}.".format( "Yz", "China"))
print("Hello,My name is {:^7}, and i am from {:<7}.".format( "Yz", "China"))
Output:
Hello,My name is Yz, and i am from China.
Hello,My name is Yz , and i am from China .
:号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充,也可以指定format后的对象来填充,如下面将会看到的解决中英文混输格式对齐的问题
print("Hello,My name is {:~>7}, and i am from {:!>7}.".format( "Yz", "China"))
print("Hello,My name is {:*^7}, and i am from {:3<7}.".format( "Yz", "China"))
Output:
Hello,My name is ~~~~~Yz, and i am from !!China.
Hello,My name is **Yz***, and i am from China33.
在爬虫实例:中国大学排名定向爬虫中
输出结果为
可以看到中间学校名称项没有对齐,原因是当中文字符串长度没有达到指定字符串长度时,默认会采用英文空格代替,而英文空格和中文空格长度不同,故导致中英文混输时不对齐了。:采用chr(12288)表示中文空格
def printUnivList(ulist, num):
tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"#第二项指定用format中的序号为3的对象来占空白,因使用了下标,故都要添加下标
print( tplt.format("排名","学校名称", "总分",chr(12288)))
for i in range(num):
u = ulist[i]
print(tplt.format(u[0], u[1], u[2],chr(12288)))
Output:
排名 学校名称 总分
1 清华大学 852.5
2 北京大学 746.7
3 浙江大学 649.2
4 上海交通大学 625.9
5 南京大学 566.1
6 复旦大学 556.7
7 中国科学技术大学 526.4
8 华中科技大学 497.7
9 武汉大学 488.0
10 中山大学 457.2
11 西安交通大学 452.5
12 哈尔滨工业大学 450.2
13 北京航空航天大学 445.1
14 北京师范大学 440.9
15 同济大学 439.0
16 四川大学 435.7
17 东南大学 432.7
18 中国人民大学 409.7
19 南开大学 402.1
20 北京理工大学 395.6
查看关于format和旧版的%的区别