每日一包 - prettytable

238 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

介绍

prettytable最主要的目的是能够将数据以类似于ASCII表格的形式进行展示,默认展示效果类似于我们在终端中使用MySQL时查询数据得到的数据的表格格式,但是prettytable也提供了自定义表格样式的方法,只不过本文重点是介绍如何使用,如果小伙伴们对prettytable感兴趣可以去prettytable官网 pypi.org/project/pre… 进行更多的了解....

安装

-- 两种方式
pip install -U prettytable
pip install -U git+https://github.com/jazzband/prettytable

使用

基本使用

代码中涉及到的数据来自于prettytable官方网站

首先需要通过PrettyTable生成一个PrettyTable对象,当我们打印x(PrettyTable对象)的时候得到的是一个空的表格。

from prettytable import PrettyTable
​
​
x = PrettyTable()  # 创建prettytable对象
print(x)  # 得到的是空表格
​
-------------------------------结果--------------------------------
++
||
++
++
​
Process finished with exit code 0

通常情况下,我们在使用表格时,都会有表头(字段),通过借助PrettyTable对象的field_names方法可以向表格中添加表头(字段)。

from prettytable import PrettyTable
​
​
# 创建prettytable对象,得到空表格
x = PrettyTable()
# 为空表格添加字段(表头)
x.field_names = ["City name", "Area", "Population", "Annual Rainfall"]
print(x)
​
-------------------------------结果--------------------------------
+-----------+------+------------+-----------------+
| City name | Area | Population | Annual Rainfall |
+-----------+------+------------+-----------------+
+-----------+------+------------+-----------------+
​
Process finished with exit code 0

我们最终的目的是将数据填写到表格中,同样的通过借助PrettyTable对象的add_row方法可以向表格中一行一行的添加数据。

from prettytable import PrettyTable
​
​
# 创建prettytable对象,得到空表格
x = PrettyTable()
# 为空表格添加字段(表头)
x.field_names = ["City name", "Area", "Population", "Annual Rainfall"]
# 向表格中添加数据,一行数据存放在一个列表中作为add_row的参数
x.add_row(["Adelaide", 1295, 1158259, 600.5])
x.add_row(["Brisbane", 5905, 1857594, 1146.4])
x.add_row(["Darwin", 112, 120900, 1714.7])
x.add_row(["Hobart", 1357, 205556, 619.5])
x.add_row(["Sydney", 2058, 4336374, 1214.8])
x.add_row(["Melbourne", 1566, 3806092, 646.9])
x.add_row(["Perth", 5386, 1554769, 869.4])
​
print(x)
​
-------------------------------结果--------------------------------
​
+-----------+------+------------+-----------------+
| City name | Area | Population | Annual Rainfall |
+-----------+------+------------+-----------------+
|  Adelaide | 1295 |  1158259   |      600.5      |
|  Brisbane | 5905 |  1857594   |      1146.4     |
|   Darwin  | 112  |   120900   |      1714.7     |
|   Hobart  | 1357 |   205556   |      619.5      |
|   Sydney  | 2058 |  4336374   |      1214.8     |
| Melbourne | 1566 |  3806092   |      646.9      |
|   Perth   | 5386 |  1554769   |      869.4      |
+-----------+------+------------+-----------------+
​
Process finished with exit code 0

上面向表格中添加数据时,添加几行数据就需要调用几次add_row方法,显然这种方式在日常开发中并不适用,因此prettytableadd_row方法同样支持一次性的向表格中添加多条数据。

x.field_names = ["City name", "Area", "Population", "Annual Rainfall"]
# 添加多条数据,多条数据存放在一个列表中作为add_row方法的参数
x.add_rows(
    [        ["Adelaide", 1295, 1158259, 600.5],
        ["Brisbane", 5905, 1857594, 1146.4],
        ["Darwin", 112, 120900, 1714.7],
        ["Hobart", 1357, 205556, 619.5],
        ["Sydney", 2058, 4336374, 1214.8],
        ["Melbourne", 1566, 3806092, 646.9],
        ["Perth", 5386, 1554769, 869.4],
    ]
)

当然除了上面向表格中添加表头和数据的方式之外,还可以通过一列一列的向表格中添加数据,使用这种方式需要借助PrettyTable对象的add_column方法。add_column方法需要两个参数,第一个参数是表格的字段,是string类型,第二个参数是该列需要添加的值,为list 或者 tuple

from prettytable import PrettyTable
​
​
# 创建prettytable对象,得到空表格
x = PrettyTable()
# 向表格中同时添加字段和该列字段的值
x.add_column("City name",
["Adelaide","Brisbane","Darwin","Hobart","Sydney","Melbourne","Perth"])

有时候我们可能只想要查看某几列的数据,这时候就需要在打印结果的时候进行限定,需要借助get_string方法。

# 只打印表格中的city name和population两个字段的值,其他字段不会进行打印
print(x.get_string(fields=["City name", "Population"])

另外我们可以通过get_string方法控制只输出指定的几行数据。就是通过startend这两个参数,这两个参数类似于Python的列表切片顾头不顾尾,start表示开始位置,end表示结束,0表示第一行数据。

# 打印表格中的第二 第三 和第四行数据
print(x.get_string(start=1, end=4))

通过了上面的演示,不知道大家有没有觉得,操作上有点向数据库靠拢,在数据库中是可以根据字段对表格数据进行排序,同样的prettytable也可以通过指定字段进行排序。默认按照从小到大的顺序进行排列,如果想要按照从大到小的顺序,需要额外指定参数reversesort=True

# 通过population字段对表格数据进行排序
print(x.get_string(sortby="Population"))  # 从小到大
print(x.get_string(sortby="Population", reversesort=True))  # 从大到小

从csv文件中导入数据

prettytable除了上面的基本使用之外,还可以通过该模块字典的from_csv方法将csv文件中的数据加载到prettytable的表格中,只需要简单的读文件操作即可完成。

from prettytable import from_csv


from prettytable import from_csv


with open("myfile.csv") as f:
    mytable = from_csv(f)

print(mytable)

将数据库中的数据导入到表格中

如果表格中的数据需要从数据库中获取,并且数据库中的数据可以通过Python的数据库API获取到的话,就可以使用数据库cursor对象创建prettytable。这里以mysql为例进行演示。

import pymysql
from prettytable import from_db_cursor

conn = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    database='test',
    user='root',
    password='0000',
    charset='utf8mb4'
)

cursor = conn.cursor()
sql = "select * from test;"
cursor.execute(sql)

mytable = from_db_cursor(cursor)  # 将数据库中的数据导入到prettytable中

print(mytable)


-----------------------------------结果-------------------------------
+----+------+-----+
| id | name | age |
+----+------+-----+
| 1  | 开发 |  5  |
| 2  | 运维 |  20 |
+----+------+-----+

Process finished with exit code 0