Python使用prettytable库实现类似MySQL的表格格式化输出
本文介绍Python中prettytable库的使用方法,该库可将数据以类似MySQL客户端的格式输出。内容涵盖添加表头与行列、指定行列输出、设置表格样式(如DEFAULT、MSWORD_FRIENDLY等)、调整列对齐方式及自定义边框字符,帮助开发者在控制台生成结构清晰、美观的文本表格。
楔子
在使用 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 的主要目的是将程序中产生的信息以结构化形式打印,较少直接从文件或数据库读取数据。
输出指定行、指定列
我们还可以输出表格的特定行或特定列。
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 >
~^^^^^^^^^^^^^^^^~^^^^^~^^^^^^^^^^^^^~^^^^^^^^~
"""到此这篇关于Python利用prettytable实现格式化输出内容的文章就介绍到这了,更多相关Python prettytable格式化输出内容内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









