python3美化表格数据输出结果的实现代码


Posted in Python onApril 14, 2021

技术背景

在前面我们介绍过关于python的表格数据处理方案,这其中的工作重点就是对表格类型的数据进行梳理、计算和展示,本文重点介绍展示这个方面的工作。首先我们看一个案例,定义一个数组形式的表格数据:

[dechin@dechin-manjaro table]$ ipython
Python 3.8.5 (default, Sep  4 2020, 07:30:14) 
Type 'copyright', 'credits' or 'license' for more information
IPython 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)]

当我们直接打印这个表格数据的时候,发现效果非常的难看。虽然我们可以从这个表格中获取到同样的信息,但是这种数据展示的方法对于我们直接从打印输出中获取数据是非常不利的。

使用tabulate美化表格输出

首先介绍一个工具tabulate,可以直接打印数组格式的表格数据,并且有多种输出格式可选。安装方法同样可以用pip来进行管理:

[dechin@dechin-manjaro table]$ python3 -m pip install tabulate
Requirement already satisfied: tabulate in /home/dechin/anaconda3/lib/python3.8/site-packages (0.8.9)

安装很容易,也没有其他依赖。接下来我们用ipython来展示一些基本用法:

[dechin@dechin-manjaro table]$ ipython
Python 3.8.5 (default, Sep  4 2020, 07:30:14) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.19.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from tabulate import tabulate

In [2]: import numpy as np

In [3]: header=['index']+list(range(4)) # 表头的定义

In [4]: header
Out[4]: ['index', 0, 1, 2, 3]

In [8]: table=[('Alice',1,2,3,4),('Bob',2,3,4,5)] # 表格内容的定义

In [9]: table
Out[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支持多种格式的输出,这里我们展示的仅有gridfancy_grid两种个人比较喜欢的格式。其他类型的格式还有:

"plain"
"simple"
"github"
"grid"
"fancy_grid"
"pipe"
"orgtbl"
"jira"
"presto"
"psql"
"rst"
"mediawiki"
"moinmoin"
"youtrack"
"html"
"latex"
"latex_raw"
"latex_booktabs"
"textile"

使用prettytable美化输出

类似于tabulate的,prettytable的主要目的也是规范化的美化表格数据的输出,但是在使用方法上略有差异,在不同的场景下可以使用不同的方案。这里我们先看一下prettytable的安装,同样可以使用pip来进行管理:

[dechin@dechin-manjaro table]$ python3 -m pip install prettytable
Collecting prettytable
  Downloading 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: prettytable
Successfully installed prettytable-2.1.0

安装完成后我们用一个py文件的示例来展示其用法:

# pt_test.py

from prettytable import PrettyTable

tb = PrettyTable() # 生成表格对象
tb.field_names = ['Index', 0, 1, 2, 3] # 定义表头
tb.add_row(['Alice',1,2,3,4]) # 添加一行,列是column
tb.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则使用了更加接近于数据库的操作形式,对于部分用户而言有天然的生态优势。

版权声明

本文首发链接为:https://www.cnblogs.com/dechinphy/p/table.html
作者ID:DechinPhy
更多原著文章请参考:https://www.cnblogs.com/dechinphy/

参考链接https://blog.csdn.net/qq_43901693/article/details/104920856https://blog.csdn.net/u010359398/article/details/82766474

到此这篇关于python3美化表格数据输出结果的文章就介绍到这了,更多相关python表格美化输出内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python数据结构与算法之图的基本实现及迭代器实例详解
Dec 12 Python
如何优雅地改进Django中的模板碎片缓存详解
Jul 04 Python
Django使用paginator插件实现翻页功能的实例
Oct 24 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
Feb 22 Python
python使用Plotly绘图工具绘制柱状图
Apr 01 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
Jun 20 Python
基于python框架Scrapy爬取自己的博客内容过程详解
Aug 05 Python
Pytorch Tensor基本数学运算详解
Dec 30 Python
Python 调用有道翻译接口实现翻译
Mar 02 Python
Python select及selectors模块概念用法详解
Jun 22 Python
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
Jun 11 Python
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
Jun 11 Python
Python生成九宫格图片的示例代码
用Python写一个简易版弹球游戏
python urllib库的使用详解
Apr 13 #Python
用Python将库打包发布到pypi
python xlwt模块的使用解析
python 爬取豆瓣网页的示例
简述python四种分词工具,盘点哪个更好用?
Apr 13 #Python
You might like
推荐Discuz!5的PHP代码高亮显示与实现可运行代码
2007/03/15 PHP
PHP.ini安全配置检测工具pcc简单介绍
2015/07/02 PHP
codeigniter实现get分页的方法
2015/07/10 PHP
PHP获取路径和目录的方法总结【必看篇】
2017/03/04 PHP
Yii框架分页技术实例分析
2019/08/30 PHP
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
C#中TrimStart,TrimEnd,Trim在javascript上的实现
2011/01/17 Javascript
jQuery EasyUI API 中文文档 - Calendar日历使用
2011/10/19 Javascript
js控制淡入淡出示例代码
2013/11/12 Javascript
JavaScript和CSS交互的方法汇总
2014/12/02 Javascript
JS两种类型的表单提交方法实例分析
2016/11/28 Javascript
详解如何使用Vue2做服务端渲染
2017/03/29 Javascript
详解webpack模块加载器兼打包工具
2018/09/11 Javascript
vuex 解决报错this.$store.commit is not a function的方法
2018/12/17 Javascript
使用express获取微信小程序二维码小记
2019/05/21 Javascript
小程序如何构建骨架屏
2019/05/29 Javascript
用Vue.js方法创建模板并使用多个模板合成
2019/06/28 Javascript
vuejs实现下拉框菜单选择
2020/10/23 Javascript
使用Python中的tkinter模块作图的方法
2017/02/07 Python
python使用fcntl模块实现程序加锁功能示例
2017/06/23 Python
python的pip安装以及使用教程
2018/09/18 Python
python实现狄克斯特拉算法
2019/01/17 Python
python如何实现不用装饰器实现登陆器小程序
2019/12/14 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
2020/02/05 Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
2020/07/13 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
基于Html5实现的react拖拽排序组件示例
2018/08/13 HTML / CSS
通往英国高街的商店橱窗:Down Your High Street
2020/07/19 全球购物
汽车销售顾问求职自荐信
2014/01/01 职场文书
工程师岗位职责规定
2014/02/26 职场文书
小学网上祭英烈活动总结
2014/07/05 职场文书
岗位说明书标准范本
2014/07/30 职场文书
环境科学专业求职信
2014/08/04 职场文书
构建和谐校园倡议书
2015/01/19 职场文书
给病人的慰问信
2015/03/23 职场文书
图文详解Nginx版本平滑升级方案
2021/09/15 Servers