Python实用库--PrettyTable
简介
PrettyTable是一个强大的Python第三方库,专门设计用于从程序中生成美观、易于阅读的ASCII格式表格。
在数据分析、命令行工具开发、脚本编写等领域中,特别是在需要直观呈现数据而又不依赖图形界面的情况下,PrettyTable库显得尤为实用。
其设计灵感来源于PostgreSQL的psql工具中所使用的ASCII表格风格,为用户提供了一种简洁而灵活的方式来组织和呈现数据。
它的slogan就是 “以美观的 ASCII 表格格式显示表格数据”
官网
安装
pip install prettytable
或者
poetry add prettytable
安装最新的开发版本:
python -m pip install -U git+https://github.com/jazzband/prettytable
使用
初始化创建表格
from prettytable import PrettyTable
# 初始化一个PrettyTable对象
table = PrettyTable()
插入数据
最简单的使用
from prettytable import PrettyTable
# 初始化一个PrettyTable对象
table = PrettyTable()
# 定义表格的字段名,即表格的列标题
table.field_names = ["City name", "Area", "Population", "Annual Rainfall"]
# 添加行数据,每一行代表一个城市的名称、面积、人口和年降雨量
table.add_row(["Adelaide", 1295, 1158259, 600.5])
table.add_row(["Brisbane", 5905, 1857594, 1146.4])
table.add_row(["Darwin", 112, 120900, 1714.7])
table.add_row(["Hobart", 1357, 205556, 619.5])
table.add_row(["Sydney", 2058, 4336374, 1214.8])
table.add_row(["Melbourne", 1566, 3806092, 646.9])
table.add_row(["Perth", 5386, 1554769, 869.4])
# 输出格式化后的表格
print(table)
"""
输出
+-----------+------+------------+-----------------+
| 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 |
+-----------+------+------------+-----------------+
"""
多行插入数据
上面的是通过 table.add_row([])
来一行行的添加数据,用的也是最多的
也可以一次性插入多条数据
通过 add_rows()
方法
from prettytable import PrettyTable
# 初始化一个PrettyTable对象
table = PrettyTable()
# 定义表格的字段名,即表格的列标题
table.field_names = ["City name", "Area", "Population", "Annual Rainfall"]
# 添加行数据,每一行代表一个城市的名称、面积、人口和年降雨量
table.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],
]
)
# 输出格式化后的表格
print(table)
"""
输出
+-----------+------+------------+-----------------+
| 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 |
+-----------+------+------------+-----------------+
"""
得到的结果也是一样的
按列插入
上面都是一行一行的插入,也可以一列一列的插入
通过 add_column()
方法插入一列一列的数据
from prettytable import PrettyTable
# 初始化一个PrettyTable对象
table = PrettyTable()
# 添加行数据,每一行代表一个城市的名称、面积、人口和年降雨量
table.add_column("City name",["Adelaide", "Brisbane", "Darwin", "Hobart", "Sydney", "Melbourne", "Perth"])
table.add_column("Area", [1295, 5905, 112, 1357, 2058, 1566, 5386])
table.add_column("Population", [1158259, 1857594, 120900, 205556, 4336374, 3806092, 1554769])
table.add_column("Annual Rainfall", [600.5, 1146.4, 1714.7, 619.5, 1214.8, 646.9,869.4])
# 输出格式化后的表格
print(table)
"""
输出
+-----------+------+------------+-----------------+
| 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 |
+-----------+------+------------+-----------------+
"""
输出
最简单的数据,直接 print()
输出的就是表格字符串
实际上还可以输出很多中类型的
以上面的表格为例
from prettytable import PrettyTable
# 初始化一个PrettyTable对象
table = PrettyTable()
# 定义表格的字段名,即表格的列标题
table.field_names = ["City name", "Area", "Population", "Annual Rainfall"]
# 添加行数据,每一行代表一个城市的名称、面积、人口和年降雨量
table.add_row(["Adelaide", 1295, 1158259, 600.5])
table.add_row(["Brisbane", 5905, 1857594, 1146.4])
table.add_row(["Darwin", 112, 120900, 1714.7])
table.add_row(["Hobart", 1357, 205556, 619.5])
table.add_row(["Sydney", 2058, 4336374, 1214.8])
table.add_row(["Melbourne", 1566, 3806092, 646.9])
table.add_row(["Perth", 5386, 1554769, 869.4])
以字符串形式输出
这个也是默认输出方式
如果要显式指定的话,使用 get_string()
方法
print(table)
# 或者显式指定
print(table.get_string())
"""
输出
+-----------+------+------------+-----------------+
| 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 |
+-----------+------+------------+-----------------+
"""
以CSV格式的字符串输出
print(table.get_csv_string())
"""
输出
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
"""
以html格式的字符串输出
print(table.get_html_string())
"""
输出
<table>
<thead>
<tr>
<th>City name</th>
<th>Area</th>
<th>Population</th>
<th>Annual Rainfall</th>
</tr>
</thead>
<tbody>
<tr>
<td>Adelaide</td>
<td>1295</td>
<td>1158259</td>
<td>600.5</td>
</tr>
<tr>
<td>Brisbane</td>
<td>5905</td>
<td>1857594</td>
<td>1146.4</td>
</tr>
<tr>
<td>Darwin</td>
<td>112</td>
<td>120900</td>
<td>1714.7</td>
</tr>
<tr>
<td>Hobart</td>
<td>1357</td>
<td>205556</td>
<td>619.5</td>
</tr>
<tr>
<td>Sydney</td>
<td>2058</td>
<td>4336374</td>
<td>1214.8</td>
</tr>
<tr>
<td>Melbourne</td>
<td>1566</td>
<td>3806092</td>
<td>646.9</td>
</tr>
<tr>
<td>Perth</td>
<td>5386</td>
<td>1554769</td>
<td>869.4</td>
</tr>
</tbody>
</table>
"""
以json格式的字符串输出
print(table.get_json_string())
"""
输出
[
[
"City name",
"Area",
"Population",
"Annual Rainfall"
],
{
"Annual Rainfall": 600.5,
"Area": 1295,
"City name": "Adelaide",
"Population": 1158259
},
{
"Annual Rainfall": 1146.4,
"Area": 5905,
"City name": "Brisbane",
"Population": 1857594
},
{
"Annual Rainfall": 1714.7,
"Area": 112,
"City name": "Darwin",
"Population": 120900
},
{
"Annual Rainfall": 619.5,
"Area": 1357,
"City name": "Hobart",
"Population": 205556
},
{
"Annual Rainfall": 1214.8,
"Area": 2058,
"City name": "Sydney",
"Population": 4336374
},
{
"Annual Rainfall": 646.9,
"Area": 1566,
"City name": "Melbourne",
"Population": 3806092
},
{
"Annual Rainfall": 869.4,
"Area": 5386,
"City name": "Perth",
"Population": 1554769
}
]
"""
选择性输出
例子还是这个
+-----------+------+------------+-----------------+
| 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 |
+-----------+------+------------+-----------------+
参数
上面那几个方法的参数都差不多,这里就以默认的 get_string()
的方法参数为例
- title - 可选的表格标题
- start - 包含在输出中的第一个数据行的索引
- end - 包含在输出中的最后一个数据行的索引加一(列表切片风格)
- fields - 要包含的字段(列)的名称
- header - 打印显示字段名称的标题(True或False)
- border - 在表格周围打印边框(True或False)
- preserve_internal_border - 即使禁用border,也在表格内部打印边框(True或False)
- hrules - 控制行后打印水平线的规则。允许的值:ALL, FRAME, HEADER, NONE
- vrules - 控制列之间打印垂直线的规则。允许的值:FRAME, ALL, NONE
- int_format - 控制整数数据的格式化
- float_format - 控制浮点数据的格式化
- custom_format - 使用可调用对象控制任何列的格式化
- padding_width - 列数据两侧的空格数(仅在左右填充为None时使用)
- left_padding_width - 列数据左侧的空格数
- right_padding_width - 列数据右侧的空格数
- vertical_char - 用于绘制垂直线的单个字符字符串
- horizontal_char - 用于绘制水平线的单个字符字符串
- horizontal_align_char - 用于表示对齐的单个字符字符串
- junction_char - 用于绘制线交汇点的单个字符字符串
- top_junction_char - 用于绘制顶部线交汇点的单个字符字符串
- bottom_junction_char - 用于绘制底部线交汇点的单个字符字符串
- right_junction_char - 用于绘制右侧线交汇点的单个字符字符串
- left_junction_char - 用于绘制左侧线交汇点的单个字符字符串
- top_right_junction_char - 用于绘制右上角线交汇点的单个字符字符串
- top_left_junction_char - 用于绘制左上角线交汇点的单个字符字符串
- bottom_right_junction_char - 用于绘制右下角线交汇点的单个字符字符串
- bottom_left_junction_char - 用于绘制左下角线交汇点的单个字符字符串
- sortby - 按此字段名称对行进行排序
- sort_key - 排序键函数,在排序之前应用于数据点
- reversesort - True或False以降序或升序排序
下面举一些比较常用的例子
输出指定的列
当我们只需要 City name 列和 Population 列的时候
print(table.get_string(fields=["City name", "Population"]))
"""
输出
+-----------+------------+
| City name | Population |
+-----------+------------+
| Adelaide | 1158259 |
| Brisbane | 1857594 |
| Darwin | 120900 |
| Hobart | 205556 |
| Sydney | 4336374 |
| Melbourne | 3806092 |
| Perth | 1554769 |
+-----------+------------+
"""
指定输出的行
只输出第三行到第五行
print(table.get_string(start = 2, end = 4))
# 或者通过切片的方式
print(table[2:4])
"""
输出
+-----------+------+------------+-----------------+
| City name | Area | Population | Annual Rainfall |
+-----------+------+------------+-----------------+
| Darwin | 112 | 120900 | 1714.7 |
| Hobart | 1357 | 205556 | 619.5 |
+-----------+------+------------+-----------------+
"""
排序
当我们需要排序后输出的时候
# 升序
print(table.get_string(sortby="Population"))
"""
+-----------+------+------------+-----------------+
| City name | Area | Population | Annual Rainfall |
+-----------+------+------------+-----------------+
| Darwin | 112 | 120900 | 1714.7 |
| Hobart | 1357 | 205556 | 619.5 |
| Adelaide | 1295 | 1158259 | 600.5 |
| Perth | 5386 | 1554769 | 869.4 |
| Brisbane | 5905 | 1857594 | 1146.4 |
| Melbourne | 1566 | 3806092 | 646.9 |
| Sydney | 2058 | 4336374 | 1214.8 |
+-----------+------+------------+-----------------+
"""
# 降序
print(table.get_string(sortby="Population", reversesort=True))
"""
+-----------+------+------------+-----------------+
| City name | Area | Population | Annual Rainfall |
+-----------+------+------------+-----------------+
| Sydney | 2058 | 4336374 | 1214.8 |
| Melbourne | 1566 | 3806092 | 646.9 |
| Brisbane | 5905 | 1857594 | 1146.4 |
| Perth | 5386 | 1554769 | 869.4 |
| Adelaide | 1295 | 1158259 | 600.5 |
| Hobart | 1357 | 205556 | 619.5 |
| Darwin | 112 | 120900 | 1714.7 |
+-----------+------+------------+-----------------+
"""
为表添加个标题
print(table.get_string(title="Australian Capital Territories by area"))
"""
输出
+-------------------------------------------------+
| Australian Capital Territories by area |
+-----------+------+------------+-----------------+
| 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 |
+-----------+------+------------+-----------------+
"""
读取文件
从CSV文件读入数据
test.cvs文件
from prettytable import from_csv
with open("test.csv") as fp:
table = from_csv(fp)
print(table)
"""
输出
+-----------+------+------------+-----------------+
| 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 |
+-----------+------+------------+-----------------+
"""
从数据库中读取数据
如果表数据在数据库中,则可以访问该数据库获取数据,然后将获取数据之后的游标对象构建一个 PrettyTable,
例如从mysql中读取数据
import pymysql
from prettytable import from_db_cursor
conn = None
curses = None
try:
conn = pymysql.connect(
user = 'root',
passwd = '111111',
host = '10.0.0.200',
port = 3306,
db = 'codebox',
charset = 'utf8'
) # 新建连接
curses = conn.cursor() # 新建游标,类似指针
sql = """select * from test"""
# 打印sql语句
print(curses.mogrify(sql))
curses.execute(sql) # 执行sql语句
# 打印结果,以表格的形式
print(from_db_cursor(curses))
"""
+----+-------+-----+--------+
| id | name | age | gender |
+----+-------+-----+--------+
| 1 | user1 | 17 | 0 |
| 2 | user2 | 50 | 1 |
| 3 | user3 | 22 | 1 |
| 4 | user4 | 33 | 0 |
+----+-------+-----+--------+
"""
except Exception as e:
print(e)
finally:
if curses:
curses.close() # 关闭游标
if conn:
conn.close() # 关闭连接
sqlite也类似
import sqlite3
from prettytable import from_db_cursor
connection = sqlite3.connect("mydb.db")
cursor = connection.cursor()
cursor.execute("SELECT field1, field2, field3 FROM my_table")
print(from_db_cursor(curses))
从HTML导入数据
from prettytable import from_html
html_string = '''<table>
<tr>
<th>code</th>
<th>uuid</th>
<th>name</th>
<th>IP</th>
</tr>
<tr>
<td>1</td>
<td>server01</td>
<td>server-01</td>
<td>192.168.100.1</td>
</tr>
<tr>
<td>2</td>
<td>server02</td>
<td>server-02</td>
<td>192.168.100.2</td>
</tr>
</table>'''
table = from_html(html_string)
print(table[0])
"""
输出
+------+----------+-----------+---------------+
| code | uuid | name | IP |
+------+----------+-----------+---------------+
| 1 | server01 | server-01 | 192.168.100.1 |
| 2 | server02 | server-02 | 192.168.100.2 |
+------+----------+-----------+---------------+
"""
删除表数据
rettytable提供四种方法用于删除数据:
del_row()
:删除某行,允许传入一个整数参数,(从0开始)。del_column()
:删除某列,允许传入一个字符串,表示要删除的列的字段名。clear_rows()
:删除所有数据,但保存列的字段名。clear()
:删除所有数据,包括列的字段名。
样式
PrettyTable 具有许多样式选项,用于控制表格的各个方面显示。可以自由地单独设置每个选项。
set_style()
方法只是自动为您执行此操作。
用 set_style 方法设置一些预定义好的样式
可以设置的选项
- DEFAULT - 默认外观,用于撤销您可能所做的任何样式更改
- MARKDOWN - 以 Markdown 格式打印表格
- PLAIN_COLUMNS - 无边框样式,适用于命令行程序的列数据
- MSWORD_FRIENDLY - 与Microsoft Word的“转换为表格”功能配合良好的格式
- ORGMODE - 适合Org模式语法的表格样式
- SINGLE_BORDER 和 DOUBLE_BORDER - 使用连续的单/双线边框和Box绘制字符的样式,以便在终端上更精美的显示
其他样式可能会在未来的版本中出现。
示例
以markdown形式输出
from prettytable import MARKDOWN
table.set_style(MARKDOWN)
# from prettytable import PLAIN_COLUMNS
# table.set_style(PLAIN_COLUMNS)
# 输出格式化后的表格
print(table)
"""
输出
| 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 |
"""
以PLAIN_COLUMNS形式输出
from prettytable import PLAIN_COLUMNS
table.set_style(PLAIN_COLUMNS)
# 输出格式化后的表格
print(table)
"""
输出
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
"""
以 MSWORD_FRIENDLY 形式输出
from prettytable import MSWORD_FRIENDLY
table.set_style(MSWORD_FRIENDLY)
# 输出格式化后的表格
print(table)
"""
输出
| 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 |
"""
以 ORGMODE 形式输出
from prettytable import ORGMODE
table.set_style(ORGMODE)
# 输出格式化后的表格
print(table)
"""
输出
|-----------+------+------------+-----------------|
| 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 |
|-----------+------+------------+-----------------|
"""
样式参数
选项 | 详情 |
---|---|
border | 布尔选项(必须为True或False)。 控制是否在表格内部和周围绘制边框。 |
preserve_internal_border | 布尔选项(必须为True或False)。 控制当border=False时,是否仍在表格内绘制边框。 |
header | 布尔选项(必须为True或False)。 控制表格的第一行是否为显示所有字段名称的标题行。 |
hrules | 控制在行后打印水平线的规则。 允许的值:FRAME, HEADER, ALL, NONE。 |
HEADER, ALL, NONE | 这些是在prettytable模块内部定义的变量,因此请确保导入它们或使用prettytable.FRAME等。 |
vrules | 控制在列之间打印垂直线的规则。 允许的值:FRAME, ALL, NONE。 |
int_format | 控制整数数据打印方式的字符串。 工作方式类似于:print("%<int_format>d" % data)。 |
float_format | 控制浮点数数据打印方式的字符串。 工作方式类似于:print("%<float_format>f" % data)。 |
custom_format | 字段和可调用对象的字典。这允许您设置任何您想要的格式 例如: pf.custom_format["my_col_int"] = lambda f, v: f"{v:,}" 。可调用对象的类型为 Callable[[str, Any], str] 。 |
padding_width | 列数据两侧的空格数(仅在左右填充为None时使用)。 |
left_padding_width | 列数据左侧的空格数。 |
right_padding_width | 列数据右侧的空格数。 |
vertical_char | 用于绘制垂直线的单个字符字符串。 默认值:|。 |
horizontal_char | 用于绘制水平线的单个字符字符串。 默认值:-。 |
_horizontal_align_char | 用于表示水平线中列对齐的单个字符字符串。 默认值:对于Markdown为:,否则为None。 |
junction_char | 用于绘制线交汇点的单个字符字符串。 默认值:+。 |
top_junction_char | 用于绘制顶部线交汇点的单个字符字符串。 默认值:junction_char。 |
bottom_junction_char | 用于绘制底部线交汇点的单个字符字符串。 默认值:junction_char。 |
right_junction_char | 用于绘制右侧线交汇点的单个字符字符串。 默认值:junction_char。 |
left_junction_char | 用于绘制左侧线交汇点的单个字符字符串。 默认值:junction_char。 |
top_right_junction_char | 用于绘制右上角线交汇点的单个字符字符串。 默认值:junction_char。 |
top_left_junction_char | 用于绘制左上角线交汇点的单个字符字符串。 默认值:junction_char。 |
bottom_right_junction_char | 用于绘制右下角线交汇点的单个字符字符串。 默认值:junction_char。 |
bottom_left_junction_char | 用于绘制左下角线交汇点的单个字符字符串。 默认值:junction_char。 |
边框
设置边框是否有
table.border = False
# 输出格式化后的表格
print(table)
# 或者
print(table.get_string(border = False))
"""
输出
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
"""
设置边框样式
# 是否显示边框,默认为True
table.border = True
# 横边框
table.horizontal_char = '^'
# 竖边框
table.vertical_char = '>'
# 边框连接符
table.junction_char = '~'
# 输出格式化后的表格
print(table)
"""
输出
~^^^^^^^^^^^~^^^^^^~^^^^^^^^^^^^~^^^^^^^^^^^^^^^^^~
> 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 >
~^^^^^^^^^^^~^^^^^^~^^^^^^^^^^^^~^^^^^^^^^^^^^^^^^~
"""
表头
table.header = False
# 输出格式化后的表格
print(table)
# 或者
print(table.get_string(header = False))
"""
+-----------+------+---------+--------+
| 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 |
+-----------+------+---------+--------+
"""
对齐方式
可以通过将单字符字符串分配给 align
属性来更改表格中列的对齐方式。
允许的字符串分别为l
、r
和c
,分别代表左对齐、右对齐和居中对齐
默认参数就是居中对齐
分两种
- 所有列修改相同的
- 每一列修改各自的
所有列都相同的
以左对齐为例
table.align = "l"
# 输出格式化后的表格
print(table)
"""
输出
+-----------+------+------------+-----------------+
| 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 |
+-----------+------+------------+-----------------+
"""
每列单独修改
table.align["City name"] = "l"
table.align["Area"] = "c"
table.align["Population"] = "r"
table.align["Annual Rainfall"] = "c"
# 输出格式化后的表格
print(table)
"""
输出
+-----------+------+------------+-----------------+
| 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 |
+-----------+------+------------+-----------------+
"""
使用带颜色的表格
例子
from prettytable.colortable import ColorTable, Themes
table = ColorTable(theme=Themes.OCEAN)
print(table)
内置的只有两个主题 DEFAULT 和 OCEAN
也可以自己写
可以仿照源码中的写
class Themes:
DEFAULT = Theme()
OCEAN = Theme(
default_color="96",
vertical_color="34",
horizontal_color="34",
junction_color="36",
)
参数部分
参数 | 描述 |
---|---|
default_color |
作为默认使用的颜色 |
vertical_char 、horizontal_char 和 junction_char |
用于创建表格轮廓的字符 |
vertical_color 、horizontal_color 和 junction_color |
用于设置每个字符样式的颜色 |
注意:颜色使用
Theme.format_code(s: str)
函数进行格式化。
该函数接受一个字符串。如果字符串以转义码开头(如 \x1b),则返回给定字符串。
如果字符串仅包含空格,则返回空字符串 ""。如果字符串是数字(如 "34"),则会自动将其格式化为转义码。
总结
PrettyTable是一个简单而实用的库,但它并不是一个专门用于处理大型数据集的工具。以下是PrettyTable的一些缺点:
- 性能限制:当处理大量数据时,PrettyTable的性能可能有限。它在处理大型数据集时可能会变得缓慢,并消耗大量的内存资源。如果需要处理大规模的数据集,使用其他更为高效的库会更合适。
- 灵活性不足:PrettyTable相对简单,功能相对较少,提供的功能有一定限制。它不支持对表格进行复杂的操作,例如合并单元格、复杂排序、过滤等。如果需要更高级的表格处理功能,可能需要使用其他库或者自行实现。
- 导出格式有限:PrettyTable的主要目的是在命令行中打印表格。它支持将表格导出为ASCII格式或HTML格式,但在更复杂的用例中,可能需要支持更多导出格式,例如Excel、CSV等。如果需要保存表格为不同的文件格式,可能需要额外的转换步骤。
本文来自博客园,作者:厚礼蝎,转载请注明原文链接:https://www.cnblogs.com/guangdelw/p/18250097