python用prettytable输出漂亮的表格

一、前言

最近我正在用PYTHON写一个小工具,这个工具主要是用来管理各种资源的信息,比如阿里云的ECS等信息,因为我工作的电脑使用的是LINUX,所以我想用PYTHON写一个命令行管理工具。基本功能是将阿里云的资源信息同步到数据库中,然后就可以使用命令行进行查询。

[En]

Recently, I am using python to write a gadget, this tool is mainly used to manage the information of various resources, such as Ali Yun’s ECS and other information, because the computer I work on uses LINUX, so I want to write a command line management tool with python. The basic function is to synchronize the information of Ali Yun’s resources to the database, and then you can use the command line to query.

因为信息是在命令行上显示的,所以众所周知,在命令行上显示复杂的文本看起来真的很累,所以想到它可以像表格一样显示,看起来就舒服多了。

[En]

Because the information is displayed on the command line, it is well known that displaying complex text on the command line looks really tiring, so thinking that it can be displayed like a table, it looks much more comfortable.

prettytable库就是这么一个工具,prettytable可以打印出美观的表格,并且对中文支持相当好(如果有试图自己实现打印表格,你就应该知道处理中文是多么的麻烦)

说明:本文使用Markdown语法编写,为了展示方便,以及复制方便,所以本文中没有使用截图,因为格式控制的问题,文章中的运行结果会出现一些分割线的偏移,在终端中呈现并此问题,请各位手动去操作验证。

二、安装

prettytable并非python的内置库,通过 pip install prettytable即可安装。

三、一个小示例

让我们首先来看一个例子:

[En]

Let’s first look at an example:

上述示例的运行结果如下:

[En]

The running result of the above example is as follows:

linuxops@deepin:~$ python p.py
+------+----------+----------+------------+
| 编号 |  云编号  |   名称   |   IP地址   |
+------+----------+----------+------------+
|  1   | server01 | 服务器01 | 172.16.0.1 |
|  2   | server02 | 服务器02 | 172.16.0.2 |
|  3   | server03 | 服务器03 | 172.16.0.3 |
|  4   | server04 | 服务器04 | 172.16.0.4 |
|  5   | server05 | 服务器05 | 172.16.0.5 |
|  6   | server06 | 服务器06 | 172.16.0.6 |
|  7   | server07 | 服务器07 | 172.16.0.7 |
|  8   | server08 | 服务器08 | 172.16.0.8 |
|  9   | server09 | 服务器09 | 172.16.0.9 |
+------+----------+----------+------------+

在以上的示例中,我们通过 form导入了表格库。 table实例化了一个表格库,并且添加了 ['编号','云编号','名称','IP地址']为表头,如果没有添加表头,那么会以默认的Field+编号显示,例如:

+---------+----------+----------+------------+
| Field 1 | Field 2  | Field 3  |  Field 4   |
+---------+----------+----------+------------+

因此,为了更直观地看到每一列的含义,请添加一个标题。

[En]

So in order to see the meaning of each column more intuitively, add a header.

四、添加数据

prettytable提供了多种的添加数据的方式,最常用的应该就是按行按列添加数据了。

在上面的简单示例中,我们按行添加数据。

[En]

In the simple example above, we add data by row.

添加的数据必须是列表形式,并且数据的列表长度必须与表头的长度相同。在实际使用中,重要的是要注意添加的数据是否与头部对应。

[En]

The added data must be in the form of a list, and the list length of the data must be the same as the length of the header. In practical use, it is important to pay attention to whether the added data corresponds to the header.

请看下面的示例:

[En]

Look at the following example:

运行结果如下:

[En]

The running results are as follows:

+-------+--------+------------+
| index | 项目 |    值     |
+-------+--------+------------+
|   1   |  编号  |     1      |
|   2   | 云编号 |  server01  |
|   3   |  名称  |  服务器01   |
|   4   | IP地址 | 172.16.0.1 |
+-------+--------+------------+

以上示例中,我们通过 add_column来按列添加数据,按列添加数据不需要在实例化表格的时候制定表头,它的表头是在添加列的时候指定的。

table.add_column('项目', ['编号','云编号','名称','IP地址']) 这一行代码为例, 项目指定了这个列的表头名为”项目”, ['编号','云编号','名称','IP地址']为列的值,同样为列表。

PrettyTable不仅提供了手动按行按列添加数据,也支持直接从csv文件中读取数据。

如果要读取cvs文件数据,必须要先导入 from_csv,否则无法运行。上面的示例运行结果如下:

+------+----------+----------+------------+
| 编号 |  云编号  |   名称   |   IP地址   |
+------+----------+----------+------------+
|  1   | server01 | 服务器01 | 172.16.0.1 |
|  2   | server02 | 服务器02 | 172.16.0.2 |
|  3   | server03 | 服务器03 | 172.16.0.3 |
|  4   | server04 | 服务器04 | 172.16.0.4 |
|  5   | server05 | 服务器05 | 172.16.0.5 |
|  6   | server06 | 服务器06 | 172.16.0.6 |
|  7   | server07 | 服务器07 | 172.16.0.7 |
|  8   | server08 | 服务器08 | 172.16.0.8 |
|  9   | server09 | 服务器09 | 172.16.0.9 |
+------+----------+----------+------------+

csv文件不能通过xls直接重命名得到,会报错。如果是xls文件,请用另存为csv获得csv文件

从数据库查询出来的数据可以直接导入到表格打印,下面的例子使用了 sqlite3,如果使用的是mysql也是一样的,只要能查询到数据就能导入到表格中

运行结果如下:

[En]

The running results are as follows:

+------+----------+----------+------------+
| 编号 |  云编号  |   名称   |   IP地址   |
+------+----------+----------+------------+
|  1   | server01 | 服务器01 | 172.16.0.1 |
|  2   | server02 | 服务器02 | 172.16.0.2 |
|  3   | server03 | 服务器03 | 172.16.0.3 |
|  4   | server04 | 服务器04 | 172.16.0.4 |
|  5   | server05 | 服务器05 | 172.16.0.5 |
|  6   | server06 | 服务器06 | 172.16.0.6 |
|  7   | server07 | 服务器07 | 172.16.0.7 |
|  8   | server08 | 服务器08 | 172.16.0.8 |
|  9   | server09 | 服务器09 | 172.16.0.9 |
+------+----------+----------+------------+

支持从html表导入,如下例所示:

[En]

Import from html tables is supported, see the following example:

运行结果如下:

[En]

The running results are as follows:

+------+----------+----------+------------+
| 编号 |  云编号  |   名称   |   IP地址   |
+------+----------+----------+------------+
|  1   | server01 | 服务器01 | 172.16.0.1 |
|  2   | server02 | 服务器02 | 172.16.0.2 |
+------+----------+----------+------------+

如上示例中,我们可以导入html的表格,但是不一样的地方是 print语句,使用html表格导入数据的时候print的必须是列表中的第一个元素,否则有可能会报 [<prettytable.prettytable object at 0x7fa87feba590>]</prettytable.prettytable>这样的错误。

这是因为 table并不是PrettyTable对象,而是包含单个PrettyTable对象的列表,它通过解析html而来,所以无法直接打印 table,而需要打印 table[0]

五、表格输出格式

正如支持多个输入一样,表格输出也支持多种格式,我们在上面的示例中使用了打印输出,这是一种常见的输出方式。

[En]

Just as multiple inputs are supported, table output also supports multiple formats, and we have used print output in the above example, which is a common output method.

直接通过 print打印出表格。这种方式打印出的表格会带边框。

print(table.get_html_string())可以打印出html标签的表格。

在上面的例子中,使用 print(table.get_html_string())会打印出如下结果:


        编号
        云编号
        名称
        IP地址

        1
        server01
        服务器01
        172.16.0.1

        2
        server02
        服务器02
        172.16.0.2

六、选择性输出

prettytable在创建表格之后,你依然可以有选择的输出某些特定的行.

print table.get_string(fields=["&#x7F16;&#x53F7;", "IP&#x5730;&#x5740;"])可以输出指定的列

通过 print(table.get_string(start = 0, end = 2))的可以打印出指定的列,当然 startend参数让我可以自由控制显示区间。当然区间中包含 start不包含 end,是不是很熟悉这样的用法?

根据输出指定行列的功能,我们可以同时指定行和列来输出,这里就不说明了。

从上面的输出区间,我们做一个大胆的假设,既然区间包含 start不包含 end这种规则和切片的一样,我们可以不可通过切片来生成一个新的表格然后将其打印。

事实上,它是可以的。

[En]

Actually, it can.

new_table = table[0:2]
print(new_table)

与上面的代码片段一样,我们可以打印出一个0到1行、总共2行的表格。Python的切片功能非常强大,有了切片,我们可以自由地输入任何行。

[En]

As in the above code snippet, we can print out a table of 0 to 1 lines with a total of 2 rows. The slicing function of python is extremely powerful, and with slicing we are free to enter any line.

有时候我们需要对输出的表格进行排序,使用 print table.get_string(sortby="&#x7F16;&#x53F7;", reversesort=True)就可以对表格进行排序,其中 reversesort指定了是否倒序排序,默认为 False,即默认正序列排序。

sortby指定了排序的字段。

七、表格的样式

通过 set_style()可以设置表格样式,prettytable内置了多种的样式个人觉得 MSWORD_FRIENDLYPLAIN_COLUMNSDEFAULT 这三种样式看起来比较清爽,在终端下显示表格本来看起就很累,再加上一下花里胡哨的东西看起来就更累。

除了以上推荐的三种样式以外,还有一种样式不得不说,那就是 RANDOM,这是一种随机的样式,每一次打印都会在内置的样式中随机选择一个,比较好玩。

具体内置几种风格,请参考官方网站尝试输出。

[En]

Specific built-in several styles, please refer to the official website to try to output.

除了内置的样式,PrettyTable还提供用户定制,如对齐、数字输出格式、边框连接符等

[En]

In addition to the built-in styles, PrettyTable also provides user customization, such as alignment, digital output format, border connectors, and so on

align提供了用户设置对齐的方式,值有 lrc方便代表左对齐,右对齐和居中 如果不设置,默认居中对齐。

在PrettyTable中,边框由三个部分组成,横边框,竖边框,和边框连接符(横竖交叉的链接符号)

以下是一个示例:

[En]

The following is an example:

table.border控制是否显示边框,默认是 True

table.junction_char控制边框连接符

table.horizontal_char控制横边框符号

table.vertical_char控制竖边框符号

上面的示例运行如下:

[En]

The above example runs as follows:

$++++++$++++++++++$++++++++++$++++++++++++$
% 编号 %  云编号  %   名称   %   IP地址   %
$++++++$++++++++++$++++++++++$++++++++++++$
%  1   % server01 % 服务器01 % 172.16.0.1 %
%  3   % server03 % 服务器03 % 172.16.0.3 %
%  2   % server02 % 服务器02 % 172.16.0.2 %
%  9   % server09 % 服务器09 % 172.16.0.9 %
%  4   % server04 % 服务器04 % 172.16.0.4 %
%  5   % server05 % 服务器05 % 172.16.0.5 %
%  6   % server06 % 服务器06 % 172.16.0.6 %
%  8   % server08 % 服务器08 % 172.16.0.8 %
%  7   % server07 % 服务器07 % 172.16.0.7 %
$++++++$++++++++++$++++++++++$++++++++++++$

以上简要介绍了表格的一些常见样式设置,详情请参考官方网站。

[En]

The above briefly introduces some common style settings of the table, please refer to the official website for details.

原文链接:https://linuxops.org/blog/python/prettytable.html

Original: https://www.cnblogs.com/kcxg/p/15213196.html
Author: 侃豺小哥
Title: python用prettytable输出漂亮的表格

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/6585/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部
最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总