python之prettytable库的使用

news2024/12/22 20:03:54

文章目录

    • 一 什么是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 jsonpath

response_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.coloradmin.cn/o/840527.html

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

相关文章

谷粒商城第九天-解决商品品牌问题以及前后端使用检验框架检验参数

目录 一、总述 二、商品分类问题 三、前端检验 四、后端检验 五、总结 一、总述 在完成完商品分类的时候,后来测试的时候还是发现了一些问题,现在将其进行解决,问题如下: 1. 取消显示的时候,如果取消了显示&…

Unity学习参考文档和开发工具

☺ unity的官网文档:脚本 - Unity 手册 ■ 学习方式: 首先了解unity相关概述,快速认识unity编辑器,然后抓住重点的学:游戏对象、组件|C#脚本、预制体、UI ☺ 学习过程你会发现,其实Unity中主要是用c#进行开…

Javaweb学习(2)

Javaweb学习 一、Maven1.1 Maven概述1.2 Maven简介1.3、Maven基本使用1.4、IDEA配置Maven1.6、依赖管理&依赖范围 二、MyBatis2.1 MyBatis简介2.2 Mybatis快速入门2.3、解决SQL映射文件的警告提示2.4、Mapper代理开发 三、MyBaits核心配置文件四、 配置文件的增删改查4.1 M…

【c++】VSCode配置 c++ 环境(重新制作)

上一篇帖子【c】VSCode配置 c 环境(小白教程)_vscode配置c/c环境_StudyWinter的博客-CSDN博客 大火,但是依旧有很多小伙伴反应没有配好环境,今天打算重新写一个教程,希望对大家有帮助。 1 MinGW下载安装 在CSDN上传了…

高温环境下光模块光功率降低的原因与解决方案

光模块是光纤通信系统中的关键组件,其稳定的光功率输出对于确保通信质量至关重要。然而,高温环境下光模块的光功率往往会出现下降,本期文章我们将探讨高温环境下光模块光功率降低的原因和解决方案。 一、高温环境下光功率降低的原因 &#…

深入理解@ConfigurationProperties注解的作用和用法

文章目录 前言一、配置文件application.properties二、添加依赖三、创建配置类四、测试总结 前言 ConfigurationProperties是一个用于定义属性的注解,通常用于Spring应用程序的配置类中。 通过使用ConfigurationProperties注解,可以将外部配置文件中的属…

YOLOv5引入FasterNet主干网络,目标检测速度提升明显

目录 一、背景介绍1.1 目标检测算法简介1.2 YOLOv5简介及发展历程 二、主干网络选择的重要性2.1 主干网络在目标检测中的作用2.2 YOLOv5使用的默认主干网络 三、FasterNet简介与原理解析3.1 FasterNet概述3.2 FasterNet的网络结构3.2.1 基础网络模块3.2.2 快速特征融合模块3.2.…

ENSP-PPP Chap双向认证

日期6-26 📎PPP chap 双向认证.zip 📎PPP chap 双向认证.docx

Linux常用命令——domainname命令

在线Linux命令查询工具 domainname 显示和设置系统的NIS域名 补充说明 domainname命令用于显示和设置系统的NIS域名。 语法 domainname(选项)(参数)选项 -v:详细信息模式; -F:指定读取域名信息的文件。参数 NIS域名:指定要…

ClickHouse(十一):Clickhouse MergeTree系列表引擎 - MergeTree(1)

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容! 🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,Kerberos安全认证,大数据OLAP体系技术栈-CSDN博客 &…

通义千问7B本地部署的实战方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

Flink开发环境准备: centos-jdk8

linux-jdk8 - Flink开发环境准备 一、基本介绍二、环境准备1.1 JDK环境1.2 开发工具1.3 Maven环境 三、flink下载安装配置3.1 Flink下载3.2 flink本地模式安装 - linux3.3 常用配置3.4 日志的查看和配置 四、单机 Standalone 的方式运行 Flink 一、基本介绍 Flink底层源码是基于…

架构,性能和游戏 《游戏编程模式》学习笔记

开新坑,准备把《游戏编程模式》这本书啃完。这是一本讲设计模式的书,针对游戏开发而作,写得很好。 以下是读书笔记,文末有原文链接 每个程序都有一定的软件架构,哪怕是全塞到main里也是一种架构好的架构可以把代码写成…

【LeetCode 75】第二十题(2215)找出两数组的不同

目录 题目: 示例: 分析: 代码运行结果: 题目: 示例: 分析: 找出两个数组中不一样的数,将nums1中有的数而nums2没有的数放在res[0]中,将nums2中有的数二nums1没有的数放在res[1]中. 那我们…

路由器静态路由实验

介绍 静态路由是由管理员手动配置和维护的路由。 如何理解静态路由了?配置一条静态路由就是告诉路由器怎么去往某个目的ip或ip地址段。去往目的地的时候需要查找路由表。 静态路由优缺点: 优点: 静态路由配置简单,并且无需动态…

03.利用Redis实现缓存功能---解决缓存穿透版

学习目标&#xff1a; 提示&#xff1a;学习如何利用Redis实现添加缓存功能解决缓存穿透版 学习产出&#xff1a; 缓存穿透讲解图&#xff1a; 解决方案&#xff1a; 采用缓存空对象采用布隆过滤器 解决方案流程图&#xff1a; 1. 准备pom环境 <dependency><gro…

完整模型的训练套路

从心所欲 不逾矩 天大地大 皆可去 一、官方模型的初使用 使用VGG16模型 VGG模型使用代码示例&#xff1a; import torchvision.models from torch import nndataset torchvision.datasets.CIFAR10(/cifar10, False, transformtorchvision.transforms.ToTensor())vgg16_true …

百度智能创做AI平台

家人们好&#xff0c;在数字化时代&#xff0c;人工智能正引领着一场前所未有的创新浪潮。今天&#xff0c;我们将为大家介绍百度智能创做AI平台&#xff0c;这个为创意赋能、助力创作者的强大工具。无论你是创意工作者、内容创作者&#xff0c;还是想要释放内心创造力的个人&a…

人工智能巨头齐聚,研究和掌控人工智能

这四家公司表示&#xff0c;他们成立了Frontier Model Forum&#xff0c;以确保"前沿AI模型的安全和负责任的开发"。 四家全球最先进的人工智能公司成立了一个研究日益强大的人工智能并建立最佳控制实践的组织&#xff0c;随着公众对技术影响的担忧和监管审查的增加…

Python(七十)元组的遍历

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…