嗨害大家好鸭!我是小熊猫❤
虽然之前发的文章当中老是说摸鱼摸鱼~ ~ ~
但是咱正事还是要干滴~ ~ ~
有效率的干事 才能有效率的摸鱼~ ~ ~
大家在用python处理表格数据中,
许多 的工作重点就是对表格类型的数据进行梳理、计算和展示,
本文重点介绍展示这个方面的工作。
首先我们看一个案例,定义一个数组形式的表格数据:
[dechin@dechin-manjaro table]$ ipythonPython 3.8.5 (default, Sep 4 , 07:30:14) Type 'copyright', 'credits' or 'license' for more informationIPython 7.19.0 -- An enhanced Interactive Python. Type '?' for help.In [1]: table=[('a',1,2,3),('b',2,3,4)]In [2]: print(table)[('a', 1, 2, 3), ('b', 2, 3, 4)]
当我们直接打印这个表格数据的时候,
发现效果非常的难看。
虽然我们可以从这个表格中获取到同样的信息,
但是这种数据展示的方法对于我们直接从打印输出中获取数据是非常不利的。
1.使用tabulate美化表格输出
首先介绍一个工具tabulate,可以直接打印数组格式的表格数据,并且有多种输出格式可选。安装方法同样可以用pip来进行管理:
[dechin@dechin-manjaro table]$ python3 -m pip install tabulateRequirement already satisfied: tabulate in /home/dechin/anaconda3/lib/python3.8/site-packages (0.8.9)
安装很容易,也没有其他依赖。
接下来我们用ipython来展示一些基本用法:
[dechin@dechin-manjaro table]$ ipythonPython 3.8.5 (default, Sep 4 , 07:30:14) Type 'copyright', 'credits' or 'license' for more informationIPython 7.19.0 -- An enhanced Interactive Python. Type '?' for help.In [1]: from tabulate import tabulateIn [2]: import numpy as npIn [3]: header=['index']+list(range(4)) # 表头的定义In [4]: headerOut[4]: ['index', 0, 1, 2, 3]In [8]: table=[('Alice',1,2,3,4),('Bob',2,3,4,5)] # 表格内容的定义In [9]: tableOut[9]: [('Alice', 1, 2, 3, 4), ('Bob', 2, 3, 4, 5)]In [11]: print(tabulate(table,headers=header,tablefmt='grid')) # 用grid的格式打印表格内容+---------+-----+-----+-----+-----+| index | 0 | 1 | 2 | 3 |+=========+=====+=====+=====+=====+| Alice | 1 | 2 | 3 | 4 |+---------+-----+-----+-----+-----+| Bob| 2 | 3 | 4 | 5 |+---------+-----+-----+-----+-----+In [12]: print(tabulate(table,headers=header,tablefmt='fancy_grid')) # 用fancy_grid的格式打印╒═════════╤═════╤═════╤═════╤═════╕│ index │ 0 │ 1 │ 2 │ 3 │╞═════════╪═════╪═════╪═════╪═════╡│ Alice │ 1 │ 2 │ 3 │ 4 │├─────────┼─────┼─────┼─────┼─────┤│ Bob│ 2 │ 3 │ 4 │ 5 │╘═════════╧═════╧═════╧═════╧═════╛
在这个案例中,
我们分别产生了数组格式的表头和表格内容,
然后用tabulate进行封装之后再打印出来。
由于tabulate支持多种格式的输出,
这里我们展示的仅有grid和fancy_grid两种个人比较喜欢的格式。
其他类型的格式还有:
"plain""simple""github""grid""fancy_grid""pipe""orgtbl""jira""presto""psql""rst""mediawiki""moinmoin""youtrack""html""latex""latex_raw""latex_booktabs""textile"
2.使用prettytable美化输出
类似于tabulate的,
prettytable的主要目的也是规范化的美化表格数据的输出,
但是在使用方法上略有差异,
在不同的场景下可以使用不同的方案。
这里我们先看一下prettytable的安装,
同样可以使用pip来进行管理:
[dechin@dechin-manjaro table]$ python3 -m pip install prettytableCollecting prettytableDownloading prettytable-2.1.0-py3-none-any.whl (22 kB)Requirement already satisfied: wcwidth in /home/dechin/anaconda3/lib/python3.8/site-packages (from prettytable) (0.2.5)Installing collected packages: prettytableSuccessfully installed prettytable-2.1.0
安装完成后我们用一个py文件的示例来展示其用法:
from prettytable import PrettyTabletb = PrettyTable() # 生成表格对象tb.field_names = ['Index', 0, 1, 2, 3] # 定义表头tb.add_row(['Alice',1,2,3,4]) # 添加一行,列是columntb.add_row(['Bob',2,3,4,5])print (tb) # 打印输出
代码的执行结果如下:
[dechin@dechin-manjaro table]$ python3 pt_test.py +-------+---+---+---+---+| Index | 0 | 1 | 2 | 3 |+-------+---+---+---+---+| Alice | 1 | 2 | 3 | 4 || Bob | 2 | 3 | 4 | 5 |+-------+---+---+---+---+
由于使用的案例跟上面介绍的tabulate是一样的,
所以输出结果也类似,相当于多了一种输出格式。
但是除了输出格式之外,
我们发现prettytable可以很好的利用行和列的添加的形式来进行表格操作,
操作习惯更接近于数据库的操作形式,
因此对于经常使用数据库的人而言,
prettytable可能是一种更好的表格数据输出解决方案。
总结
本文介绍了两种表格数据的打印工具:tabulate和prettytable的安装与基本使用方法。
由于表格数据本身是没有对输出格式进行规范化的,
因此打印出来的数据会显得比较杂乱,不利于直观的阅读。
因此引入这两种工具,加强了输出结果的可读性。
这两者在使用上各有优劣,
tabulate支持更多形式的表格样式,
而prettytable则使用了更加接近于数据库的操作形式,
对于部分用户而言有天然的生态优势。