PythonPrettyTable的全面详解

发布时间:2023-05-17

PythonPrettyTable是Python的一个生成漂亮表格的库。它提供了简单易用的API以及各种定制化的选项,可以快速生成符合各种需求、美观易读的表格。在这篇文章中,我们将从多个方面对PythonPrettyTable做详细阐述,以便让读者了解该库的所有特性以及如何使用。

一、基础使用

PythonPrettyTable最简单的使用是通过传入表头和数据来创建表格:

from prettytable import PrettyTable
x = PrettyTable()
x.field_names = ["City name", "Area", "Population", "Annual Rainfall"]
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])
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           |
+-------------+------+------------+-----------------+

在这个例子中,我们首先创建了一个空的PrettyTable对象,然后设置表头和数据,最后通过print函数打印出来。

二、定制化选项

除了基础使用之外,PythonPrettyTable还提供了各种选项以定制生成的表格。下面是其中几个常用的选项:

1. 添加样式

from prettytable import PrettyTable
x = PrettyTable()
x.field_names = ["City name", "Area", "Population", "Annual Rainfall"]
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.align["City name"] = "l" # 左对齐
x.align["Area"] = "r"      # 右对齐
x.align["Population"] = "r" 
x.align["Annual Rainfall"] = "r"
x.border = False   # 去掉边框
x.header = True    # 显示表头
x.padding_width = 1 # 设置单元格的间隔
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

在这个例子中,我们使用了align属性设置每列的对齐方式,使用了border属性设置是否显示边框,使用了header属性设置是否显示表头,以及使用了padding_width属性设置单元格之间的间隔。

2. 设置字段类型

有时候表格中的字段可能是不同的类型,如果想要正确地对这些类型进行比较或排序,就需要通过属性set_style来设置类型。

from prettytable import PrettyTable
x = PrettyTable()
x.field_names = ["City name", "Area", "Population", "Annual Rainfall"]
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.align["City name"] = "l"
x.align["Area"] = "r"
x.align["Population"] = "r" 
x.align["Annual Rainfall"] = "r"
x.set_style(13) # 设置Area和Population的类型为整型
x.set_style(13, target='rows', slice(1, 5, 2)) # 设置偶数行的Area和Population的类型为整型
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

在这个例子中,我们使用了set_style属性,设置了AreaPopulation的类型为整型。

三、高级用法

除了基础用法和定制化选项之外,PythonPrettyTable还提供了许多高级的功能,包括表格转置、排序、分片等。这些功能可以更加灵活地处理表格数据,满足各种需求。

1. 表格转置

通过transpose属性可以将表格转置。

from prettytable import PrettyTable
x = PrettyTable()
x.field_names = ["City name", "Area", "Population", "Annual Rainfall"]
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.align["City name"] = "l"
x.align["Area"] = "r"
x.align["Population"] = "r" 
x.align["Annual Rainfall"] = "r"
print(x.transpose())

这样就可以生成一个转置后的表格:

+-----------------+-------------+---------+-------+--------+------------+
| 0               | 1           | 2       | 3     | 4      | 5          |
+-----------------+-------------+---------+-------+--------+------------+
| City name       | Adelaide    | Brisbane| Darwin| Hobart | Sydney     |
|                 |             |         |       |        |            |
|                 | 1295        | 5905    | 112   | 1357   | 2058       |
|                 |             |         |       |        |            |
|                 | 1158259     | 1857594 |120900 | 205556 | 4336374    |
|                 |             |         |       |        |            |
|                 | 600.5       | 1146.4  |1714.7 | 619.5  | 1214.8     |
|-----------------+-------------+---------+-------+--------+------------+
|                 | Melbourne   |         |       |        |            |
|-----------------+-------------+---------+-------+--------+------------+
|                 | 1566        |         |       |        |            |
|                 | 3806092     |         |       |        |            |
|                 | 646.9       |         |       |        |            |
+-----------------+-------------+---------+-------+--------+------------+

在这个例子中,我们使用了transpose属性将表格进行了转置。

2. 排序和分片

通过sortbyreverse_sortby属性可以对表格进行排序。另外,可以使用slice方法对表格进行分片。

from prettytable import PrettyTable
x = PrettyTable()
x.field_names = ["City name", "Area", "Population", "Annual Rainfall"]
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.align["City name"] = "l"
x.align["Area"] = "r"
x.align["Population"] = "r" 
x.align["Annual Rainfall"] = "r"
x.sortby = "Population"
x.reversesort = True
print(x.get_string(start=1, end=4, sortby="Area"))

这样就可以生成一个排序和分片后的表格:

+------------+------+------------+-----------------+
| City name  | Area | Population | Annual Rainfall |
+------------+------+------------+-----------------+
| Brisbane   | 5905 | 1857594    | 1146.4          |
| Melbourne  | 1566 | 3806092    | 646.9           |
| Sydney     | 2058 | 4336374    | 1214.8          |
+------------+------+------------+-----------------+

在这个例子中,我们使用了sortby属性对表格进行了排序,并使用了reversesort属性使结果反向。同时,我们还使用了get_string方法对结果进行分片,并设置了其他属性以满足不同的需求。

四、总结

在本篇文章中,我们详细阐述了PythonPrettyTable库的基础使用、定制化选项以及高级用法。通过实例化一个PrettyTable对象,设置表头和数据,以及其他不同的属性和方法,我们可以生成各种各样的表格来展示和处理数据。如果你对数据分析和可视化有一定的需求,PythonPrettyTable是一个非常好的选择。