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

1.PrettyTable 是什么
PrettyTable是用于生成简单ASCII表的Python库。 它的灵感来自PostgreSQL外壳程序psql中使用的ASCII表。 ... PrettyTable可以从CSV,HTML或数据库光标读取数据,并以ASCII或HTML输出数据

为什么会用它呢?因为想用Python输出一些数据,用表格的形式,看起来比较好看.
安装: pip install prettytable

先来个简单的例子:

#!/usr/bin/python3
from prettytable import PrettyTable
    
x = PrettyTable()
x.field_names = ["省份", "城市", "邮编", "介绍"]

x.add_row(["广东省", "广州市", 510000, "广东省省会"])
x.add_row(["四川省", "成都市", 610000, "四川省省会"])
x.add_row(["湖南省", "长沙市", 410000, "湖南省省会"])
x.add_row(["湖北省", "武汉市", 430000, "湖北省省会"])
x.add_row(["福建省", "福州市", 350000, "福建省省会"])
print(x)

+--------+--------+--------+------------+
|  省份  |  城市  |  邮编   |    介绍    |
+--------+--------+--------+------------+
| 广东省 | 广州市 | 510000 | 广东省省会  |
| 四川省 | 成都市 | 610000 | 四川省省会  |
| 湖南省 | 长沙市 | 410000 | 湖南省省会  |
| 湖北省 | 武汉市 | 430000 | 湖北省省会  |
| 福建省 | 福州市 | 350000 | 福建省省会  |
+--------+--------+--------+------------+

上面就是简单的通过add_row的方法来展示,大家可以根据自己的需求,遍历数据后add row 即可了.

当然也有人可能希望时候,我能不能按列来加数据,当然可以了,上个例子:

#!/usr/bin/python3

from prettytable import PrettyTable
    
x = PrettyTable()

column_names = ["省份", "城市", "邮编", "介绍"]

x.add_column(column_names[0], ["广东省", "四川省", "湖南省", "湖北省", "福建省"])
x.add_column(column_names[1], ["广州市","成都市","长沙市","武汉市","福州市" ])  
x.add_column(column_names[2], [510000, 610000, 410000, 430000, 350000])  
x.add_column(column_names[3], ["广东省省会","四川省省会","湖南省省会","湖北省省会","福建省省会"])
print(x)

+--------+--------+--------+------------+
|  省份  |  城市  |  邮编   |    介绍    |
+--------+--------+--------+------------+
| 广东省 | 广州市 | 510000 | 广东省省会  |
| 四川省 | 成都市 | 610000 | 四川省省会  |
| 湖南省 | 长沙市 | 410000 | 湖南省省会  |
| 湖北省 | 武汉市 | 430000 | 湖北省省会  |
| 福建省 | 福州市 | 350000 | 福建省省会  |
+--------+--------+--------+------------+

可以看到,一样的效果,所以大家根据自己数据情况来决定用哪个方式即可了.
从上面2个例子来看,我们可能列得数据还不是很长,我们换个文字比较多的,看看效果.

#!/usr/bin/python3
from prettytable import PrettyTable
    
x = PrettyTable()
x.field_names = ["省份", "城市", "邮编", "介绍"]

x.add_row(["广东省", "广州市", 510000, "广东省省会非常好广东省省会非常好广东省省会非常好广东省省会非常好"])
x.add_row(["四川省", "成都市", 610000, "四川省省会"])

print(x)
+--------+--------+--------+------------------------------------------------------------------+
|  省份  |  城市  |  邮编  |                               介绍                                 |
+--------+--------+--------+------------------------------------------------------------------+
| 广东省 | 广州市 | 510000 | 广东省省会非常好广东省省会非常好广东省省会非常好广东省省会非常好        |
| 四川省 | 成都市 | 610000 |                            四川省省会                              |
+--------+--------+--------+------------------------------------------------------------------+

从上面可以看出来,默认内容都是居中的,那如果我们希望设置靠左或者是靠右的话,怎么配置了.
这个可以设置针对单个列的也可以全局设置.

#!/usr/bin/python3
from prettytable import PrettyTable
    
x = PrettyTable(["省份", "城市", "邮编", "介绍"],align='l')

x.add_row(["广东省", "广州市", 510000, "广东省省会非常好广东省省会非常好广东省省会非常好广东省省会非常好"])
x.add_row(["四川省", "成都市", 610000, "四川省省会"])

print(x)

+--------+--------+--------+------------------------------------------------------------------+
| 省份   | 城市   | 邮编   | 介绍                                                              |
+--------+--------+--------+------------------------------------------------------------------+
| 广东省 | 广州市 | 510000 | 广东省省会非常好广东省省会非常好广东省省会非常好广东省省会非常好       |
| 四川省 | 成都市 | 610000 | 四川省省会                                                        |
+--------+--------+--------+------------------------------------------------------------------+

这里就是使用了align的配置来让内容靠左,如果需要靠右,就把l 换成r即可了.就是因为的left and right.居中就是c (center)
可能到这里,有人会说,我只需要设置某些列就可以了,不需要全部.那也很简单.

#!/usr/bin/python3
from prettytable import PrettyTable
    
x = PrettyTable(["省份", "城市", "邮编", "介绍"])
x.align["介绍"] = 'r'
x.add_row(["广东省", "广州市", 510000, "广东省省会非常好广东省省会非常好广东省省会非常好广东省省会非常好"])
x.add_row(["四川省", "成都市", 610000, "四川省省会"])

print(x)

+--------+--------+--------+------------------------------------------------------------------+
|  省份  |  城市  |  邮编  |                                                              介绍 |
+--------+--------+--------+------------------------------------------------------------------+
| 广东省 | 广州市 | 510000 |        广东省省会非常好广东省省会非常好广东省省会非常好广东省省会非常好 |
| 四川省 | 成都市 | 610000 |                                                         四川省省会 |
+--------+--------+--------+------------------------------------------------------------------+

关于内容的位置以及简单的一个使用上面已经完成了.下面来看一下一些别的功能.
PrettyTable有许多样式选项,可控制表格显示方式的各个方面.
1.打印指定的列或行

print (x.get_string(fields=["省份", "城市"])) #指定列
print (x.get_string(start=1,end=2)) #指定从哪里开始到哪里结束的行

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 #默认值是True

4.不显示标题

x.header = False #默认值是True
  1. 设置边框显示的类型.具体效果看个人需要尝试不同类型即可.
x.hrules = NONE #设置水平线的,可以取值:FRAME, HEADER, ALL, NONE
x.vrules = NONE #设置垂直线可以取值:FRAME, HEADER, ALL, NONE

6.控制两侧的空格数

x.padding_width = 6 # 这个只有在下面这2个没设置的情况下才生效.
x.left_padding_width = 5
x.right_padding_width = 4

7.关于表格的边框用什么样式,默认就是-|+这3个来组成,但是也可以根据自己的需求来定制样式的.

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.补充使用方式,上面的设置只是其中一种方式,也可以用另外一种方式定义.

x = PrettyTable(border=False, header=False, padding_width=5)

9.关于换行,这个需求不一定每个表格的数据都需要,如果是有些描述比较长,然后我们没有处理换行的话,出来的表格会非常丑.下面给个例子:



上面就是没换行的效果.那我们可以通过使用一个很简单的方式,让这个变得非常好看.

from textwrap import fill
x.add_row(["四川省", "成都市", 610000, fill("四川省省会",width=100)])

+--------+--------+--------+----------------------------------------------------------------------------------+
|  省份  |  城市  |  邮编  | 介绍                                                                             |
+--------+--------+--------+----------------------------------------------------------------------------------+
| 广东省 | 广州市 | 510000 | 广东省省会非常好广东省省会非常广东省省会非常好广东省省会非常好广东省省会非常好广        |
|        |        |        | 东省省会非广东省省会非常好广东省省会非常好广东省省会非常好广东省省会非广东省省会       |
|        |        |        | 非常好广东省省会非常好广东省省会非常好广东省省会非好广东省省会非常好广东省省会非       |
|        |        |        | 常好                                                                             |
| 四川省 | 成都市 | 610000 | 四川省省会                                                                       |
+--------+--------+--------+----------------------------------------------------------------------------------+

经过上面的设置之后,表格会根据设置的宽度自动换行.格式看起来有点对不齐,是这里粘贴的问题哈.最终的效果是对齐的.
10.最后上个改变颜色的例子.

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)

以上简单介绍了表格常用的一些样式设置,具体的请参考官方网站

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容