python之prettytable库的使用

文章目录

    • 一 什么是prettytable
    • 二 prettytable的简单使用
        • 1. 添加表头
        • 2. 添加行
        • 3. 添加列
        • 4. 设置对齐方式
        • 4. 设置输出表格样式
        • 5. 自定义边框样式
        • 6. 其它功能
    • 三 prettytable在实际中的使用

一 什么是prettytable

prettytable是Python的一个第三方工具库,用于创建漂亮的ASCII表格。它支持带有列标题的表格,还支持颜色和自定义格式。使用prettytable可以轻松地将数据可视化为表格,方便阅读和理解。
因为是第三方工具库,所以要先安装,安装命令如下

pip install prettytable

二 prettytable的简单使用

1. 添加表头

使用field_names来添加表头,传参是一个list对象

from prettytable import PrettyTable#创建Prettytable实例
tb = PrettyTable()
#添加表头
tb.field_names = ['userId', 'name', 'sex', 'age', 'job']
print(tb)
>>>
+--------+------+-----+-----+-----+
| userId | name | sex | age | job |
+--------+------+-----+-----+-----+
+--------+------+-----+-----+-----+

2. 添加行

使用add_row()方法来添加行数据,传参是一个list对象

from prettytable import PrettyTable#创建Prettytable实例
tb = PrettyTable()
#添加表头
tb.field_names = ['userId', 'name', 'sex', 'age', 'job']
#添加行数据
tb.add_row(['123', '张三', '男', '25', 'softtest'])
print(tb)

3. 添加列

使用add_column()方法来添加列数据,add_column()有两个参数:第一个是列标题的名称,类型str;第二个是列对应的value,类型list,如下

from prettytable import PrettyTable#创建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 |   深圳  |
+--------+------+-----+-----+----------+---------+

4. 设置对齐方式

使用align来设置对齐方式,默认居中对齐,其中l是向左对齐,c是居中对齐,r是向右对齐,如下

from prettytable import PrettyTable#创建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', ['深圳', '北京'])
#设置对齐方式align: l,r,c
tb.align = 'l'
print(tb)
>>>
+--------+------+-----+-----+----------+---------+
| userId | name | sex | age | job      | address |
+--------+------+-----+-----+----------+---------+
| 123    | 张三 || 25  | softtest | 深圳    |
| 124    | 李四 || 25  | Java     | 北京    |
+--------+------+-----+-----+----------+---------+

4. 设置输出表格样式

使用set_style()来控制数据表格的样式,set_style()默认参数是DEFAULT,如果需要更换为其它方式,则需要import导入后使用,如下
表格样式

from prettytable import PrettyTable
from prettytable import MARKDOWN, MSWORD_FRIENDLY#创建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', ['深圳', '北京'])
#设置对齐方式align: l,r,c
tb.align = 'l'
#设置输出表格的样式
print("DEFAULT表格样式:")
print(tb)
tb.set_style(MSWORD_FRIENDLY)
print("MSWORD_FRIENDLY表格样式:")
print(tb)
tb.set_style(MARKDOWN)
print("MARKDOWN表格样式:")
print(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. 自定义边框样式

prettyble中表格边框由三部分组成:横边框,竖边框和边框连接符,由以下几个属性控制

table.border 控制是否显示边框,默认是True
table.junction_char 控制边框连接符
table.horizontal_char 控制横边框符号
table.vertical_char 控制竖边框符号
from prettytable import PrettyTable#创建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', ['深圳', '北京'])
#设置对齐方式align: l,r,c
tb.align = 'l'
#自定义边框样式
print("默认边框:")
print(tb)
tb.horizontal_char = '*'  #横边框
tb.vertical_char = '|'    #竖边框
tb.junction_char = '|'    #边框连接符
print("自定义边框:")
print(tb)
>>>
默认边框:
+--------+------+-----+-----+----------+---------+
| userId | name | sex | age | job      | address |
+--------+------+-----+-----+----------+---------+
| 123    | 张三 || 25  | softtest | 深圳    |
| 124    | 李四 || 25  | Java     | 北京    |
+--------+------+-----+-----+----------+---------+
自定义边框:
|********|******|*****|*****|**********|*********|
| userId | name | sex | age | job      | address |
|********|******|*****|*****|**********|*********|
| 123    | 张三 || 25  | softtest | 深圳    |
| 124    | 李四 || 25  | Java     | 北京    |
|********|******|*****|*****|**********|*********|

6. 其它功能

prettytable还有很多其它功能,可以参考官网或者这篇文章:python用prettytable输出漂亮的表格

三 prettytable在实际中的使用

在实际的接口测试过程中,我们都要对返回的接口进行数据校验,包括但不限于返回状态码,单个字段值。为了能够快速知道,以及美化校验结果,我们可以使用prettytable来进行结果校验输出,如下。

返回接口:

{"HEAD": {"xTypCod": null,"xHdrLen": "203","xSysCod": null,"xDskSys": null,"xWkeCod": "WdcTrfSetBeg","xKeyVal": null,"xIsuCnl": "X86","xEncCod": null,"xDalCod": null,"xCmmTyp": null,"xOrgIsu": null,"xPreIsu": null,"xEntUsr": "","xUsrPwd": null,"xIsuDat": "0","xIsuTim": "0","xMacCod": null,"xRtnLvl": null,"xRtnCod": "WYZQA76","xDevNbr": null,"xTlrNbr": "100025","xRqsNbr": null,"xCmmRsv": null,"xDocSiz": null,"xItvTms": null,"xMsgFlg": null,"xAppRsv": null},"BODY": {"$ERRORMSG$": [{"xErrMsg": "WYZQA76锁查步骤表记录失败,批次D019860641"}]}
}

校验脚本

from prettytable import PrettyTable
import json
import jsonpathresponse_data = """
{"HEAD": {"xTypCod": null,"xHdrLen": "203","xSysCod": null,"xDskSys": null,"xWkeCod": "WdcTrfSetBeg","xKeyVal": null,"xIsuCnl": "X86","xEncCod": null,"xDalCod": null,"xCmmTyp": null,"xOrgIsu": null,"xPreIsu": null,"xEntUsr": "","xUsrPwd": null,"xIsuDat": "0","xIsuTim": "0","xMacCod": null,"xRtnLvl": null,"xRtnCod": "WYZQA76","xDevNbr": null,"xTlrNbr": "100025","xRqsNbr": null,"xCmmRsv": null,"xDocSiz": null,"xItvTms": null,"xMsgFlg": null,"xAppRsv": null},"BODY": {"$ERRORMSG$": [{"xErrMsg": "WYZQA76锁查步骤表记录失败,批次D019860641"}]}
}
"""def validate_data(data: dict, yqz: dict) -> None:""":param data: 要校验的数据:param yqz: 预期值:return: None"""data = json.loads(data)tb = PrettyTable()#添加表头tb.field_names = ['比较字段', '预期值', '实际值', '是否通过']for k, v in yqz.items():#用jsonpath查找预期值字段在返回数据resresponse_data的值res = jsonpath.jsonpath(data, '$..' + k)[0]if v == res:tb.add_row([k, v, res, 'Y'])else:tb.add_row([k, v, res, 'N'])print(tb)#预期值数据
yqz = {'xRtnCod': 'WYZQA76', 'xErrMsg': 'WYZQA76锁查步骤表记录失败,批次D019860641'}
#结果校验
validate_data(response_data, yqz)

效果

>>>
+----------+------------------------------------------+------------------------------------------+----------+
| 比较字段 |                  预期值                  |                  实际值                  | 是否通过 |
+----------+------------------------------------------+------------------------------------------+----------+
| xRtnCod  |                 WYZQA76                  |                 WYZQA76                  |    Y     |
| xErrMsg  | WYZQA76锁查步骤表记录失败,批次D019860641 | WYZQA76锁查步骤表记录失败,批次D019860641 |    Y     |
+----------+------------------------------------------+------------------------------------------+----------+

上面做了一个简单的演示,实际工作中可以结合自身需求封装成组件或者包,使用效果会更佳。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/27944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CI/CD持续集成持续发布(jenkins)

1.背景 在实际开发中,我们经常要一边开发一边测试,当然这里说的测试并不是程序员对自己代码的单元测试,而是同组程序员将代码提交后,由测试人员测试; 或者前后端分离后,经常会修改接口,然后重新…

Makefile

什么是 Makefile 一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中, Makefile文件定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编 译,哪些文件需要重新编译,甚至于进行更复杂的功…

Android平台GB28181设备接入端如何实现多视频通道接入?

技术背景 我们在设计Android平台GB28181设备接入模块的时候,有这样的场景诉求,一个设备可能需要多个通道,常见的场景,比如车载终端,一台设备,可能需要接入多个摄像头,那么这台车载终端设备可以…

使用webpack插件webpack-dev-server 出现Cannot GET/的解决办法

问题描述 文档地址深入浅出webpack 使用 DevServer运行webpack,跑起来之后提示Cannot GET/: 解决方案: 查阅官方文档 根据目录结构修改对应的配置: 然后就可以成功访问:

【MongoDB】万字长文,命令与代码一一对应SpringBoot整合MongoDB之MongoTemplate

目录 一、导入依赖与配置信息 二、导入测试数据创建实体类 三、插入数据 1、Insert默认集合插入 2、Insert指定集合插入 3、Insert批量插入数据 4、save默认集合插入 5、save指定集合插入 6、insert与save的区别 四、修改数据 1、修改符合条件的第一条数据 2、全…

redis 原理 7:开源节流 —— 小对象压缩

Redis 是一个非常耗费内存的数据库,它所有的数据都放在内存里。如果我们不注意节约使用内存,Redis 就会因为我们的无节制使用出现内存不足而崩溃。Redis 作者为了优化数据结构的内存占用,也苦心孤诣增加了非常多的优化点,这些优化…

[PM]敏捷开发之Scrum总结

在项目管理中,不少企业和项目团队也发现传统的项目管理模式已不能很好地适应今天的项目环境的要求。因此,敏捷项目管理应运而生,本文将为大家介绍Scrum敏捷项目管理以及应用方法。 什么是Scrum敏捷项目管理 敏捷项目管理作为新兴的项目管理模…

Java后台生成ECharts图片,并以Base64字符串返回

前言 通过echarts的jar包,Java后台生成一张图片,并把图片插入到word中。关于word插图片的代码在下一章。 需要用到的工具PhantomJS,Echarts-convert.js,jquery.js,echarts.js。 1.PhantomJS 介绍 PhantomJS是一个不需要浏览器的富客户端。 官方介绍&…

[保研/考研机试] 猫狗收容所 C++实现

题目描述: 输入: 第一个是n,它代表操作序列的次数。接下来是n行,每行有两个值m和t,分别代表题目中操作的两个元素。 输出: 按顺序输出收养动物的序列,编号之间以空格间隔。 源代码&#xff…

用i18n 实现vue2+element UI的国际化多语言切换详细步骤及代码

一、i18n的安装 这个地方要注意自己的vue版本和i1n8的匹配程度,如果是vue2点几,记得安装i18n的8版本,不然会自动安装的最新版本,后面会报错哦,查询了下资料,好像最新版本是适配的vue3。 npm install vue-…

Attacks in NLP

一、 Introduction NLP对抗攻击是人工智能对抗攻击的一个重要的组成部分,但是最近几年才逐渐开始兴起,究其原因在于NLP对抗攻击与传统computer vision或者audio对抗攻击有很大的不同,主要在于值空间的连续性(CV、audio&#xff0…

04-6_Qt 5.9 C++开发指南_QListWidget和QToolButton

文章目录 1. 实例简介2. 源码2.1 混合式界面设计2.2 mainwindow.h2.3 mainwindow.cpp 1. 实例简介 Qt 中用于项 (Item)处理的组件有两类,一类是 Item Views,包括 QListView、QTreeView、QTableView、QColumnView 等;另一类是 Item Widgets,包…

C# 完成串口通信RS485

C# 完成串口通信RS485|RS232上下位机交互 第零步: 我用的是电脑usb 转串口的所以首先是驱动程序下载,我们用的是CH341 下载地址:https://www.wch.cn/downloads/CH341SER_EXE.html 第一步:连接机器 RS485 上面有三个端子&#xf…

深度学习与计算机相结合:直播实时美颜SDK的创新之路

时下,实时美颜技术就成为了直播主们的得力工具,它可以在直播过程中即时处理视频画面。而支持实时美颜功能的SDK更是推动了这项技术的发展,让直播主和普通用户都能轻松使用美颜功能。 一、美颜技术的演进 早期的美颜技术主要依赖于简单的图…

eclipse Java Editor Templates

​ Window - Preferences - Java - Editor - Templates ​ date ${currentDate:date(yyyy.MM.dd)}

Java版工程行业管理系统源码-专业的工程管理软件-em提供一站式服务

​ Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目…

塔矢行洋对战藤原佐为,谁才是最接近神之一手的人

大家好, 我是嘉宾, 今天我们来盘点一下古今第一高手对局 ,塔矢行洋对战藤原佐为,谁才是最接近神之一手的人, 在所有设定都点击好之后, 塔矢行洋下出了自己的第一步 添加图片注释,不超过 140 字(可选) 佐…

【每日一题】—— B. Maximum Rounding(Codeforces Round 891 (Div. 3))

🌏博客主页:PH_modest的博客主页 🚩当前专栏:每日一题 💌其他专栏: 🔴 每日反刍 🟡 C跬步积累 🟢 C语言跬步积累 🌈座右铭:广积粮,缓称…

VIM 编辑器: Bram Moolenaar

VIM 用了很长时间, 个人的 VIM 配置文件差不多10年没有更新了。以前写程序的时候, 编辑都用这个。 linux kernel, boost规模的代码都不在话下。现在虽然代码写的少了,依然是我打开文件的首选。 现在用手机了,配个蓝牙键…

无涯教程-Perl - endnetent函数

描述 此功能告诉系统您不再希望使用getnetent从网络列表中读取条目。 语法 以下是此函数的简单语法- endnetent返回值 此函数不返回任何值。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perluse Socket;while ( ($name, $aliases, $addrtype, $net) getnetent() )…