Python利用prettytable实现格式化输出内容
作者:古明地觉 发布时间:2023-10-17 11:02:32
标签:Python,prettytable
楔子
我们用 MySQL 客户端查询数据的时候,是以下面这种格式显示的:
内容展示的非常漂亮,而 Python 有一个第三方模块叫 prettytable,专门用来将数据以上面这种格式输出,我们来看一下用法。
添加表头、添加行、添加列
类似于数据库中的表,由表头(或者说字段名),以及每一行的内容组成。
from prettytable import PrettyTable
# 传入的 name、age、country 相当于表头
tb = PrettyTable(["name", "age", "country"])
# 调用 add_row 添加行记录
tb.add_row(["Jack Morrison", 49, "America"])
tb.add_row(["Shimada Genji", 35, "Japan"])
tb.add_row(["Shimada Hanzo", 38, "Japan"])
tb.add_row(["Angela Ziegler", 37, "Switzerland"])
print(tb)
"""
+----------------+-----+-------------+
| name | age | country |
+----------------+-----+-------------+
| Jack Morrison | 49 | America |
| Shimada Genji | 35 | Japan |
| Shimada Hanzo | 38 | Japan |
| Angela Ziegler | 37 | Switzerland |
+----------------+-----+-------------+
"""
如果在编写的过程中,我们需要临时添加一列,prettytable 也是支持的。
from prettytable import PrettyTable
tb = PrettyTable(["name", "age", "country"])
tb.add_row(["Jack Morrison", 49, "America"])
tb.add_row(["Shimada Genji", 35, "Japan"])
tb.add_row(["Shimada Hanzo", 38, "Japan"])
tb.add_row(["Angela Ziegler", 37, "Switzerland"])
# 调用 add_column 添加一列
tb.add_column("gender",
["male", "male", "male", "female"])
print(tb)
"""
+----------------+-----+-------------+--------+
| name | age | country | gender |
+----------------+-----+-------------+--------+
| Jack Morrison | 49 | America | male |
| Shimada Genji | 35 | Japan | male |
| Shimada Hanzo | 38 | Japan | male |
| Angela Ziegler | 37 | Switzerland | female |
+----------------+-----+-------------+--------+
"""
输出内容是不是和 MySQL数据库类似呢。
此外 prettytable 还支持从 csv、数据库、html 等数据源中导入数据,但说实话,从数据源读取数据我们一般使用 pandas,并且还会伴随着数据处理。而使用 prettytable 只是为了让程序中产生的信息,能够以结构化的形式打印,很少会从文件或数据库里面读数据。
输出指定行、指定列
我们也可以输出 table 的指定行、指定列。
from prettytable import PrettyTable
tb = PrettyTable(["name", "age", "country", "gender"])
tb.add_row(["Jack Morrison", 49, "America", "male"])
tb.add_row(["Shimada Genji", 35, "Japan", "male"])
tb.add_row(["Shimada Hanzo", 38, "Japan", "male"])
tb.add_row(["Angela Ziegler", 37, "Switzerland", "female"])
# 只输出 name 和 age 两列
# start 和 end 表示开始和结束的行数(从 0 开始)
print(tb.get_string(fields=["name", "age"],
start=1, end=3))
"""
+---------------+-----+
| name | age |
+---------------+-----+
| Shimada Genji | 35 |
| Shimada Hanzo | 38 |
+---------------+-----+
"""
# 此外可以用来进行排序
print(tb.get_string(sortby="age", reversesort=True))
"""
+----------------+-----+-------------+--------+
| name | age | country | gender |
+----------------+-----+-------------+--------+
| Jack Morrison | 49 | America | male |
| Shimada Hanzo | 38 | Japan | male |
| Angela Ziegler | 37 | Switzerland | female |
| Shimada Genji | 35 | Japan | male |
+----------------+-----+-------------+--------+
"""
设置表格样式
表格也支持几种不同的样式,供我们选择。
from prettytable import *
tb = PrettyTable(["name", "age", "country", "gender"])
tb.add_row(["Jack Morrison", 49, "America", "male"])
tb.add_row(["Shimada Genji", 35, "Japan", "male"])
tb.add_row(["Shimada Hanzo", 38, "Japan", "male"])
tb.add_row(["Angela Ziegler", 37, "Switzerland", "female"])
# 样式支持以下几种:
# DEFAULT、MSWORD_FRIENDLY、PLAIN_COLUMNS、RANDOM
# 之前的样式就是 DEFAULT
tb.set_style(MSWORD_FRIENDLY)
print(tb)
"""
| name | age | country | gender |
| Jack Morrison | 49 | America | male |
| Shimada Genji | 35 | Japan | male |
| Shimada Hanzo | 38 | Japan | male |
| Angela Ziegler | 37 | Switzerland | female |
"""
tb.set_style(PLAIN_COLUMNS)
print(tb)
"""
name age country gender
Jack Morrison 49 America male
Shimada Genji 35 Japan male
Shimada Hanzo 38 Japan male
Angela Ziegler 37 Switzerland female
"""
tb.set_style(RANDOM)
print(tb)
"""
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;
. name age country gender .
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;
. Jack Morrison 49 America male .
. Shimada Genji 35 Japan male .
. Shimada Hanzo 38 Japan male .
. Angela Ziegler 37 Switzerland female .
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;
"""
说实话,还是默认的 DEFAULT 样式最好看。
设置对齐方式
from prettytable import *
tb = PrettyTable(["name", "age", "country", "gender"])
tb.add_row(["Jack Morrison", 49, "America", "male"])
tb.add_row(["Shimada Genji", 35, "Japan", "male"])
tb.add_row(["Shimada Hanzo", 38, "Japan", "male"])
tb.add_row(["Angela Ziegler", 37, "Switzerland", "female"])
# l 代表左对齐,c 代表居中,r 代表右对齐
# 默认居中
tb.align["name"] = "l"
tb.align["age"] = "c"
tb.align["country"] = "r"
print(tb)
"""
+----------------+-----+-------------+--------+
| name | age | country | gender |
+----------------+-----+-------------+--------+
| Jack Morrison | 49 | America | male |
| Shimada Genji | 35 | Japan | male |
| Shimada Hanzo | 38 | Japan | male |
| Angela Ziegler | 37 | Switzerland | female |
+----------------+-----+-------------+--------+
"""
设置边框样式
在 PrettyTable 中,边框由三个部分组成:横边框,竖边框,和边框连接符,我们都可以修改。
from prettytable import *
tb = PrettyTable(["name", "age", "country", "gender"])
tb.add_row(["Jack Morrison", 49, "America", "male"])
tb.add_row(["Shimada Genji", 35, "Japan", "male"])
tb.add_row(["Shimada Hanzo", 38, "Japan", "male"])
tb.add_row(["Angela Ziegler", 37, "Switzerland", "female"])
# 是否显示边框,默认为True
tb.border = True
# 横边框
tb.horizontal_char = '^'
# 竖边框
tb.vertical_char = '>'
# 边框连接符
tb.junction_char='~'
print(tb)
"""
~^^^^^^^^^^^^^^^^~^^^^^~^^^^^^^^^^^^^~^^^^^^^^~
> name > age > country > gender >
~^^^^^^^^^^^^^^^^~^^^^^~^^^^^^^^^^^^^~^^^^^^^^~
> Jack Morrison > 49 > America > male >
> Shimada Genji > 35 > Japan > male >
> Shimada Hanzo > 38 > Japan > male >
> Angela Ziegler > 37 > Switzerland > female >
~^^^^^^^^^^^^^^^^~^^^^^~^^^^^^^^^^^^^~^^^^^^^^~
"""
来源:https://mp.weixin.qq.com/s/lvLKh_8QE7XTW_PQ5ZA40w


猜你喜欢
- 昨天我只是将数据库附加到SQL2012,然后各个数据库都做了收缩事务日志的操作兼容级别这些都没有改再附加回SQL2005的时候就报错在SQL
- 一、前言卷起来好吧,元旦已经过了,就开始写文章模式了。这篇文章会对完全数的各种侦测进行详细解释。写作不易,支持一波~二、完全数是什么1、定义
- 前言在很多网站中,基本上的都会有一个开头和一个结尾,在每一个网页中都会显示。相对于这种的来说,在Django中,最好的方法就是使用inclu
- 一、所用知识点:1. for循环与if判断的结合2. %s占位符的使用3. 辅助标志的使用(标志位)4. break的使用二、代码示例:
- 使用的技术有jquery.form.js框架, 以及springmvc框架。主要实现异步文件上传的同时封装对象,以及一些注意事项。功能本身是
- 本文实例讲述了python队列原理及实现方法。分享给大家供大家参考,具体如下:队列(queue)是只允许在一端进行插入操作,而在另一端进行删
- 这篇文章主要介绍了基于js实现抽红包并分配代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
- 今天一个同事报告一个问题,表都不能使用了,检查了一下,发现问题 db2 => select * from testACTNO ACTK
- Pygame模块一览表:引入pygame模块 ,若本机没有请自行pip install pygame#载入必要的模块import pygam
- 本文实例讲述了Python捕捉和模拟鼠标事件的方法。分享给大家供大家参考。具体分析如下:这个假期玩了不少galgame,不过有些很老的游戏没
- 首先确保已安装jupyter notebook,而且添加到了环境变量再找到保存ipynb文件的文件夹,在路径处直接输入cmd,然后回车进入命
- pandas函数中pandas.DataFrame.from_dict 直接从字典构建DataFrame 。参数解析DataFrame fr
- 该章节我们学习虚拟环境的相关知识,虚拟环境对于刚刚使用Python的初学者来说使用的概率可能会比较低。但是我们依然要对它有一定的了解。认识虚
- 介绍Addit 是一个Python模块,除了提供标准的字典语法外,Addit 生成的字典的值既可以使用属性来获取,也可以使用属性进行设置。这
- 如何为list实现find方法string类型的话可用find方法去查找字符串位置:a_list.find('a')如果找到
- 今天给大家分享腾讯云的实名认证接口的调用点击免费获取产品from __future__ import print_functionimpor
- 1、我的第一个个人主页一打开就是一张很眩的图片,图片上有个“进入”,点击后才算真正看到我的主页。现在回想起来那个时候这样做,大概是很想迅速展
- Django是一个大而全的框架。需要明确的是,传参进行分页获取分页后的数据,一般都是通过向服务器发送get请求的方式实现的,在向后端服务发送
-   MySQL行转列,对经常处理数据的同学们来说,一定是不陌生的,甚至是印象深刻,因为它大概率困扰过你,
- 这篇文章主要介绍了简单了解python字符串前面加r,u的含义,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,