python module PrettyTable 打印表格 美化輸出 使用案例大全

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
  1. 設(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)站

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末唉侄,一起剝皮案震驚了整個(gè)濱河市篙梢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌美旧,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贬墩,死亡現(xiàn)場(chǎng)離奇詭異榴嗅,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)陶舞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門嗽测,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事唠粥∈栉海” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵大莫,是天一觀的道長(zhǎng)只厘。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么搁凸? 我笑而不...
    開(kāi)封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任垃你,我火速辦了婚禮惜颇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘痴怨。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般涂乌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上英岭,一...
    開(kāi)封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天湾盒,我揣著相機(jī)與錄音,去河邊找鬼诅妹。 笑死罚勾,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吭狡。 我是一名探鬼主播尖殃,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼划煮!你這毒婦竟也來(lái)了柒瓣?” 一聲冷哼從身側(cè)響起挫掏,我...
    開(kāi)封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤烙懦,失蹤者是張志新(化名)和其女友劉穎铺韧,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蟹略,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡登失,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挖炬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揽浙。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖意敛,靈堂內(nèi)的尸體忽然破棺而出馅巷,到底是詐尸還是另有隱情,我是刑警寧澤草姻,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布令杈,位于F島的核電站,受9級(jí)特大地震影響碴倾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一跌榔、第九天 我趴在偏房一處隱蔽的房頂上張望异雁。 院中可真熱鬧,春花似錦僧须、人聲如沸纲刀。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)示绊。三九已至,卻和暖如春暂论,著一層夾襖步出監(jiān)牢的瞬間面褐,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工取胎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留展哭,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓闻蛀,卻偏偏與公主長(zhǎng)得像匪傍,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子觉痛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容