1.PrettyTable 是什么
PrettyTable是用于生成簡(jiǎn)單ASCII表的Python庫(kù)兔跌。 它的靈感來(lái)自PostgreSQL外殼程序psql中使用的ASCII表。 ... PrettyTable可以從CSV,HTML或數(shù)據(jù)庫(kù)光標(biāo)讀取數(shù)據(jù)鳍烁,并以ASCII或HTML輸出數(shù)據(jù)
為什么會(huì)用它呢?因?yàn)橄胗肞ython輸出一些數(shù)據(jù),用表格的形式,看起來(lái)比較好看.
安裝: pip install prettytable
先來(lái)個(gè)簡(jiǎn)單的例子:
#!/usr/bin/python3
from prettytable import PrettyTable
x = PrettyTable()
x.field_names = ["省份", "城市", "郵編", "介紹"]
x.add_row(["廣東省", "廣州市", 510000, "廣東省省會(huì)"])
x.add_row(["四川省", "成都市", 610000, "四川省省會(huì)"])
x.add_row(["湖南省", "長(zhǎng)沙市", 410000, "湖南省省會(huì)"])
x.add_row(["湖北省", "武漢市", 430000, "湖北省省會(huì)"])
x.add_row(["福建省", "福州市", 350000, "福建省省會(huì)"])
print(x)
+--------+--------+--------+------------+
| 省份 | 城市 | 郵編 | 介紹 |
+--------+--------+--------+------------+
| 廣東省 | 廣州市 | 510000 | 廣東省省會(huì) |
| 四川省 | 成都市 | 610000 | 四川省省會(huì) |
| 湖南省 | 長(zhǎng)沙市 | 410000 | 湖南省省會(huì) |
| 湖北省 | 武漢市 | 430000 | 湖北省省會(huì) |
| 福建省 | 福州市 | 350000 | 福建省省會(huì) |
+--------+--------+--------+------------+
上面就是簡(jiǎn)單的通過(guò)add_row的方法來(lái)展示,大家可以根據(jù)自己的需求,遍歷數(shù)據(jù)后add row 即可了.
當(dāng)然也有人可能希望時(shí)候,我能不能按列來(lái)加數(shù)據(jù),當(dāng)然可以了,上個(gè)例子:
#!/usr/bin/python3
from prettytable import PrettyTable
x = PrettyTable()
column_names = ["省份", "城市", "郵編", "介紹"]
x.add_column(column_names[0], ["廣東省", "四川省", "湖南省", "湖北省", "福建省"])
x.add_column(column_names[1], ["廣州市","成都市","長(zhǎng)沙市","武漢市","福州市" ])
x.add_column(column_names[2], [510000, 610000, 410000, 430000, 350000])
x.add_column(column_names[3], ["廣東省省會(huì)","四川省省會(huì)","湖南省省會(huì)","湖北省省會(huì)","福建省省會(huì)"])
print(x)
+--------+--------+--------+------------+
| 省份 | 城市 | 郵編 | 介紹 |
+--------+--------+--------+------------+
| 廣東省 | 廣州市 | 510000 | 廣東省省會(huì) |
| 四川省 | 成都市 | 610000 | 四川省省會(huì) |
| 湖南省 | 長(zhǎng)沙市 | 410000 | 湖南省省會(huì) |
| 湖北省 | 武漢市 | 430000 | 湖北省省會(huì) |
| 福建省 | 福州市 | 350000 | 福建省省會(huì) |
+--------+--------+--------+------------+
可以看到,一樣的效果,所以大家根據(jù)自己數(shù)據(jù)情況來(lái)決定用哪個(gè)方式即可了.
從上面2個(gè)例子來(lái)看,我們可能列得數(shù)據(jù)還不是很長(zhǎng),我們換個(gè)文字比較多的,看看效果.
#!/usr/bin/python3
from prettytable import PrettyTable
x = PrettyTable()
x.field_names = ["省份", "城市", "郵編", "介紹"]
x.add_row(["廣東省", "廣州市", 510000, "廣東省省會(huì)非常好廣東省省會(huì)非常好廣東省省會(huì)非常好廣東省省會(huì)非常好"])
x.add_row(["四川省", "成都市", 610000, "四川省省會(huì)"])
print(x)
+--------+--------+--------+------------------------------------------------------------------+
| 省份 | 城市 | 郵編 | 介紹 |
+--------+--------+--------+------------------------------------------------------------------+
| 廣東省 | 廣州市 | 510000 | 廣東省省會(huì)非常好廣東省省會(huì)非常好廣東省省會(huì)非常好廣東省省會(huì)非常好 |
| 四川省 | 成都市 | 610000 | 四川省省會(huì) |
+--------+--------+--------+------------------------------------------------------------------+
從上面可以看出來(lái),默認(rèn)內(nèi)容都是居中的,那如果我們希望設(shè)置靠左或者是靠右的話,怎么配置了.
這個(gè)可以設(shè)置針對(duì)單個(gè)列的也可以全局設(shè)置.
#!/usr/bin/python3
from prettytable import PrettyTable
x = PrettyTable(["省份", "城市", "郵編", "介紹"],align='l')
x.add_row(["廣東省", "廣州市", 510000, "廣東省省會(huì)非常好廣東省省會(huì)非常好廣東省省會(huì)非常好廣東省省會(huì)非常好"])
x.add_row(["四川省", "成都市", 610000, "四川省省會(huì)"])
print(x)
+--------+--------+--------+------------------------------------------------------------------+
| 省份 | 城市 | 郵編 | 介紹 |
+--------+--------+--------+------------------------------------------------------------------+
| 廣東省 | 廣州市 | 510000 | 廣東省省會(huì)非常好廣東省省會(huì)非常好廣東省省會(huì)非常好廣東省省會(huì)非常好 |
| 四川省 | 成都市 | 610000 | 四川省省會(huì) |
+--------+--------+--------+------------------------------------------------------------------+
這里就是使用了align的配置來(lái)讓內(nèi)容靠左,如果需要靠右,就把l 換成r即可了.就是因?yàn)榈膌eft and right.居中就是c (center)
可能到這里,有人會(huì)說(shuō),我只需要設(shè)置某些列就可以了,不需要全部.那也很簡(jiǎn)單.
#!/usr/bin/python3
from prettytable import PrettyTable
x = PrettyTable(["省份", "城市", "郵編", "介紹"])
x.align["介紹"] = 'r'
x.add_row(["廣東省", "廣州市", 510000, "廣東省省會(huì)非常好廣東省省會(huì)非常好廣東省省會(huì)非常好廣東省省會(huì)非常好"])
x.add_row(["四川省", "成都市", 610000, "四川省省會(huì)"])
print(x)
+--------+--------+--------+------------------------------------------------------------------+
| 省份 | 城市 | 郵編 | 介紹 |
+--------+--------+--------+------------------------------------------------------------------+
| 廣東省 | 廣州市 | 510000 | 廣東省省會(huì)非常好廣東省省會(huì)非常好廣東省省會(huì)非常好廣東省省會(huì)非常好 |
| 四川省 | 成都市 | 610000 | 四川省省會(huì) |
+--------+--------+--------+------------------------------------------------------------------+
關(guān)于內(nèi)容的位置以及簡(jiǎn)單的一個(gè)使用上面已經(jīng)完成了.下面來(lái)看一下一些別的功能.
PrettyTable有許多樣式選項(xiàng)暑竟,可控制表格顯示方式的各個(gè)方面.
1.打印指定的列或行
print (x.get_string(fields=["省份", "城市"])) #指定列
print (x.get_string(start=1,end=2)) #指定從哪里開(kāi)始到哪里結(jié)束的行
2.排序(單列或多列)
print (x.get_string(sortby="郵編",reversesort=True)) #按郵編單列倒序打印
#這里的operator.itemgetter(0, 1) 代表第0列跟第1列,即是省份跟城市,后面定義sortby是城市,意思是先按城市排序,后按省份排序.
print (x.get_string(sort_key=operator.itemgetter(0, 1), sortby="城市"))
3.取消邊框-border
x.border = False #默認(rèn)值是True
4.不顯示標(biāo)題
x.header = False #默認(rèn)值是True
- 設(shè)置邊框顯示的類型.具體效果看個(gè)人需要嘗試不同類型即可.
x.hrules = NONE #設(shè)置水平線的,可以取值:FRAME, HEADER, ALL, NONE
x.vrules = NONE #設(shè)置垂直線可以取值:FRAME, HEADER, ALL, NONE
6.控制兩側(cè)的空格數(shù)
x.padding_width = 6 # 這個(gè)只有在下面這2個(gè)沒(méi)設(shè)置的情況下才生效.
x.left_padding_width = 5
x.right_padding_width = 4
7.關(guān)于表格的邊框用什么樣式,默認(rèn)就是-|+這3個(gè)來(lái)組成,但是也可以根據(jù)自己的需求來(lái)定制樣式的.
x.vertical_char = '*' # Single character string used to draw vertical lines. > > Default is |.
x.horizontal_char = '?' # Single character string used to draw horizontal lines. > > Default is -.
x.junction_char = '#' # Single character string used to draw line junctions. > > Default is +.
8.補(bǔ)充使用方式,上面的設(shè)置只是其中一種方式,也可以用另外一種方式定義.
x = PrettyTable(border=False, header=False, padding_width=5)
9.關(guān)于換行,這個(gè)需求不一定每個(gè)表格的數(shù)據(jù)都需要,如果是有些描述比較長(zhǎng),然后我們沒(méi)有處理?yè)Q行的話,出來(lái)的表格會(huì)非常丑.下面給個(gè)例子:
上面就是沒(méi)換行的效果.那我們可以通過(guò)使用一個(gè)很簡(jiǎn)單的方式,讓這個(gè)變得非常好看.
from textwrap import fill
x.add_row(["四川省", "成都市", 610000, fill("四川省省會(huì)",width=100)])
+--------+--------+--------+----------------------------------------------------------------------------------+
| 省份 | 城市 | 郵編 | 介紹 |
+--------+--------+--------+----------------------------------------------------------------------------------+
| 廣東省 | 廣州市 | 510000 | 廣東省省會(huì)非常好廣東省省會(huì)非常廣東省省會(huì)非常好廣東省省會(huì)非常好廣東省省會(huì)非常好廣 |
| | | | 東省省會(huì)非廣東省省會(huì)非常好廣東省省會(huì)非常好廣東省省會(huì)非常好廣東省省會(huì)非廣東省省會(huì) |
| | | | 非常好廣東省省會(huì)非常好廣東省省會(huì)非常好廣東省省會(huì)非好廣東省省會(huì)非常好廣東省省會(huì)非 |
| | | | 常好 |
| 四川省 | 成都市 | 610000 | 四川省省會(huì) |
+--------+--------+--------+----------------------------------------------------------------------------------+
經(jīng)過(guò)上面的設(shè)置之后,表格會(huì)根據(jù)設(shè)置的寬度自動(dòng)換行.格式看起來(lái)有點(diǎn)對(duì)不齊,是這里粘貼的問(wèn)題哈.最終的效果是對(duì)齊的.
10.最后上個(gè)改變顏色的例子.
from prettytable import PrettyTable
#Color
R = "\033[0;31;40m" #RED
G = "\033[0;32;40m" # GREEN
Y = "\033[0;33;40m" # Yellow
B = "\033[0;34;40m" # Blue
N = "\033[0m" # Reset
a = "ok"
b = "Failed"
t = PrettyTable(['Input', 'status'])
#Adding Both example in table
t.add_row(['FAN', G+a+N])
t.add_row(['FAN', R+b+N])
print (t)
以上簡(jiǎn)單介紹了表格常用的一些樣式設(shè)置棺克,具體的請(qǐng)參考官方網(wǎng)站