Python中使用prettytable库实现终端表格输出
介绍Python第三方库prettytable的安装方法及核心用法。通过定义表头、插入行列数据、调整对齐方式以及自定义边框与内置样式,可在终端快速输出清晰易读的ASCII表格。文末附带接口返回数据校验的实战示例,帮助开发者提升命令行数据的可视化体验。
什么是prettytable
prettytable是一款Python第三方工具库,专门用于在终端或日志中生成结构化的ASCII表格。它支持带列标题的数据展示,提供丰富的对齐、边框控制与格式转换功能,非常适合用于自动化脚本输出结果、CLI工具数据渲染或接口测试用例的比对展示。作为外部依赖,使用前需通过包管理器完成安装:
pip install prettytable
基础操作:构建与填充表格
第1步:创建实例并设定表头
首先导入库并实例化,随后通过field_names属性传入列表类型参数定义列名:
from prettytable import PrettyTable
tb = PrettyTable()
tb.field_names = ['userId', 'name', 'sex', 'age', 'job']
print(tb)
+--------+------+-----+-----+-----+
| userId | name | sex | age | job |
+--------+------+-----+-----+-----+
+--------+------+-----+-----+-----+
第2步:添加行数据与动态追加列
表格框架搭建完成后,可使用add_row()按顺序填入单行数据(传参为列表),或通过add_column()追加新字段(第一个参数为列名字符串,第二个为值列表):
from prettytable import PrettyTable
tb = PrettyTable()
tb.field_names = ['userId', 'name', 'sex', 'age', 'job']
tb.add_row(['123', '张三', '男', '25', 'softtest'])
tb.add_column('address', ['深圳'])
print(tb)
+--------+------+-----+-----+----------+---------+
| userId | name | sex | age | job | address |
+--------+------+-----+-----+----------+---------+
| 123 | 张三 | 男 | 25 | softtest | 深圳 |
+--------+------+-----+-----+----------+---------+
进阶设置:控制对齐方式与外观样式
第3步:统一设置文本对齐方向
默认情况下单元格内容居中显示。通过赋值align属性可批量修改对齐逻辑,其中l代表左对齐,c代表居中,r代表右对齐:
from prettytable import PrettyTable
tb = PrettyTable()
tb.field_names = ['userId', 'name', 'sex', 'age', 'job']
tb.add_row(['123', '张三', '男', '25', 'softtest'])
tb.add_row(['124', '李四', '男', '25', 'Java'])
tb.add_column('address', ['深圳', '北京'])
tb.align = 'l'
print(tb)
第4步:切换内置导出格式
若需将表格直接适配Markdown文档或类Word排版,可调用set_style()切换预设模板。使用前需从库中导入对应常量:
from prettytable import PrettyTable, MARKDOWN, MSWORD_FRIENDLY
tb = PrettyTable()
tb.field_names = ['userId', 'name', 'sex', 'age', 'job']
tb.add_row(['123', '张三', '男', '25', 'softtest'])
tb.add_row(['124', '李四', '男', '25', 'Java'])
tb.add_column('address', ['深圳', '北京'])
tb.set_style(MSWORD_FRIENDLY)
print("MSWORD风格:\n", tb)
tb.set_style(MARKDOWN)
print("\nMARKDOWN格式:\n", tb)
DEFAULT表格样式:
+--------+------+-----+-----+----------+---------+
| userId | name | sex | age | job | address |
| 123 | 张三 | 男 | 25 | softtest | 深圳 |
| 124 | 李四 | 男 | 25 | Java | 北京 |
MSWORD_FRIENDLY表格样式:
| userId | name | sex | age | job | address |
| 123 | 张三 | 男 | 25 | softtest | 深圳 |
| 124 | 李四 | 男 | 25 | Java | 北京 |
MARKDOWN表格样式:
| userId | name | sex | age | job | address |
|:-------|:-----|:----|:----|:----------|:--------|
| 123 | 张三 | 男 | 25 | softtest | 深圳 |
| 124 | 李四 | 男 | 25 | Java | 北京 |
第5步:自定义边框连接符与线条
ASCII表格的视觉结构由三个独立属性控制:是否渲染边框、横向连线字符、竖向连线字符以及交叉点符号。修改后再次打印即可生效:
from prettytable import PrettyTable
tb = PrettyTable()
tb.field_names = ['userId', 'name', 'sex', 'age', 'job']
tb.add_row(['123', '张三', '男', '25', 'softtest'])
tb.add_row(['124', '李四', '男', '25', 'Java'])
tb.add_column('address', ['深圳', '北京'])
tb.align = 'l'
tb.horizontal_char = '*' # 横线
tb.vertical_char = '|' # 竖线
tb.junction_char = '|' # 交叉节点
print(tb)
实战应用:接口返回数据校验输出
在自动化接口测试流程中,对比预期值与实际返回值是核心环节。利用prettytable结合jsonpath解析库,可将杂乱的JSON响应转换为结构化对照表,直观呈现各字段的匹配状态:
from prettytable import PrettyTable
import json
import jsonpath
response_data = """{
"HEAD": {
"xTypCod": null,
"xHdrLen": "203",
"xSysCod": null,
"xWkeCod": "WdcTrfSetBeg",
"xRtnCod": "WYZQA76"
},
"BODY": {
"$ERRORMSG$": [
{
"xErrMsg": "WYZQA76锁查步骤表记录失败,批次D019860641"
}
]
}
}"""
def validate_data(data_str: str, expected: dict) -> None:
resp = json.loads(data_str)
tb = PrettyTable()
tb.field_names = ['比较字段', '预期值', '实际值', '是否通过']
for field, exp_val in expected.items():
res_val = jsonpath.jsonpath(resp, f'$..{field}')[0]
status = 'Y' if exp_val == res_val else 'N'
tb.add_row([field, exp_val, res_val, status])
print(tb)
validate_data(response_data, {'xRtnCod': 'WYZQA76', 'xErrMsg': 'WYZQA76锁查步骤表记录失败,批次D019860641'})
+----------+------------------------------------------+------------------------------------------+----------+
| 比较字段 | 预期值 | 实际值 | 是否通过 |
+----------+------------------------------------------+------------------------------------------+----------+
| xRtnCod | WYZQA76 | WYZQA76 | Y |
| xErrMsg | WYZQA76锁查步骤表记录失败,批次D019860641 | WYZQA76锁查步骤表记录失败,批次D019860641 | Y |
+----------+------------------------------------------+------------------------------------------
上述示例演示了如何快速搭建数据比对视图。实际部署时可将封装逻辑写入公共模块,配合requests框架实现一键生成测试报告。以上就是Python prettytable库实现终端表格输出的详细内容,更多关于Python命令行数据可视化的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









