python 操作excel(openpyxl.load_workbook)、excel操作封装
操作excel
其他的库:
- xlrd xlwt : 过时了,只能操作xls后缀的文件。
- pandas:大数据测试 数据分析项目会用。
openpyxl:第三方库 支持的格式有:.xlsx、.xlsm、.xltx、.xltm,l不支持.xls文件格式【转化】
-1)安装 :pip + pycharm两种方式安装都可以
-2)导入:全部导入 和部分导入
excel表格操作有几个概念和相关的操作:
- 工作簿: 表格本身,workbook
- 表单: sheet
- 单元格: cell 有某行某列决定表格
- 单元格里的数据: value
读取excel表格里所有内容:sh.values
- 这是一个生成器:测试开发高级编程里会学的。== 可以转化。–list转化为列表
- 列表: 列里嵌套元组的数据。每行数据存在一个元组里,最终存在一个大列表里。
- 第一行数据存在第一个元组里; 标题
- 第二行数据存在第二个元组: 第一条测试用例数据
- 第三行数据存在第三个元组: 第二条测试用例数据
…
如果分别获取每行的数据? – for循环遍历。
操作excel
# import openpyxl
from openpyxl import load_workbook
from pathlib import Path# 0、路径处理: 文件不能写绝对路径 用相对路径处理
exc_path = Path(__file__).absolute().parent / "testcase65.xlsx"# 1、加载工作簿对象
wb = load_workbook(exc_path)# 2、找到读取数据的表单: login
sh = wb["login"]#3、找到单元格: cell 某行某列决定表格 -- 行和列是从1开始的
cell = sh.cell(row=1,column=1)#4、得到单元格里的内容 -value
cell_value = sh.cell(row=1,column=1).value
# print(cell_value)# 5、读取所有内容 -- for循环遍历到每一行的数据。
# print(list(sh.values))
# for row in sh.values:# print(row)# 6、扩展: 获取部分内容 某个区间的行列 == 元组的嵌套 每行数据是一个元组
# part_value = sh["A1:C3"]
# print(part_value)
# for row in part_value:# print(row) # (<Cell 'login'.A1>, <Cell 'login'.B1>, <Cell 'login'.C1>)# for col in row:# print(col.value)# 7、修改的操作 --了解 单元格的内容进行重新赋值, 一定要记得保存。
sh.cell(row=1, column=1).value = "case_id"
# 保存操作
wb.save("testcase65.xlsx")
# 关闭excel
wb.close()
读取内容数据类型
excel读取的数据的类型的问题总结:
- 如果单元格里只有数字,那么读取出来直接是数字-- 整型或者浮点型
- 如果单元格为空(没有编辑过数据)读取出来是 None == 注意空格是字符串 不是None 【注意不是null】
- 如果单元格当中用只有TRUE FALSE (excel表格会自动默认大写), 那么读取转化为布尔值类型–True False;
- 如果单元格只有时间格式 : 2023/07/22,那么读取出来就是 datatime类型 - 年月日时分秒 - datetime.datetime(2023, 7, 22, 0, 0)
- 以上都不是,那么就是字符串的类型;比如列表 字典等数据 读取出来是字符串:因为excel表格不认识字典这些数据类型 所以都是字符串
- 注意的问题: ‘{“Content-Type”:“application/json”}’
– 转化为字典[python识别的数据类型 再去操作]: eval() jsonpath
- 注意的问题: ‘{“Content-Type”:“application/json”}’
# import openpyxl
from openpyxl import load_workbook
from pathlib import Path# 0、路径处理: 文件不能写绝对路径 用相对路径处理
exc_path = Path(__file__).absolute().parent / "testcase65.xlsx"# 1、加载工作簿对象
wb = load_workbook(exc_path)# 2、找到读取数据的表单: login
sh = wb["login"]#3、找到单元格: cell 某行某列决定表格 -- 行和列是从1开始的
cell = sh.cell(row=1,column=1)#4、得到单元格里的内容 -value
cell_value = sh.cell(row=2,column=7).value
print(cell_value,type(cell_value))
excel在项目中的应用
接口自动化测试的项目实战-- 存储为Python数据格式。原则: 方便读取数据
- 每一条用例用字典存储,因为有key可以表示什么是意义的数据; 读取也通过key 辨别什么意义数据;
- 多条用例存在列表数据类型里,相同意义的数据存在列表 按照索引取值。
- excel表格里读取出来 存储格式为 : [{key:value},{},{},{}]
- key:可以直接来自于excel表格第一行数据 --用例标题行
- value:每一条用例 == 从第二行开始的每一行
from openpyxl import load_workbook
from pathlib import Pathexc_path = Path(__file__).absolute().parent / "testcase65.xlsx"
wb = load_workbook(exc_path)
sh = wb["login"]
cases = list(sh.values) # 所有的用例的列表 [(第一行-title),(第二行用例),(),()]
title = cases[0] # 得到标题行
list_case = []
for case in cases[1:]:data = dict(zip(title,case)) # 第一条用例的字典list_case.append(data) # 每一条用例追加到列表里。
print(list_case)# 简化列表推导式?
# cases = list(sh.values) # 所有的用例的列表 [(第一行-title),(第二行用例),(),()]
# title = cases[0] # 得到标题行
# list_case = [ dict(zip(title,case)) for case in cases[1:]]
excel操作的封装
接口自动化测试的项目实战-- 存储为Python数据格式。原则: 方便读取数据
- 每一条用例用字典存储,因为有key可以表示什么是意义的数据; 读取也通过key 辨别什么意义数据;
- 多条用例存在列表数据类型里,相同意义的数据存在列表 按照索引取值。
- excel表格里读取出来 存储格式为 : [{key:value},{},{},{}]
- key:可以直接来自于excel表格第一行数据 --用例标题行
- value:每一条用例 == 从第二行开始的每一行
因为这个方法会经常使用到,所以我们需要做封装。
-思考?封装成类还是函数呢?–函数比较好。
- 封装函数的步骤:
- 1、功能代码写出来
- 2、def 封装 + 缩进
- 3、参数化:
- 4、返回值:
from pathlib import Pathfrom openpyxl import load_workbookdef read_data(exc_path,sheetname):"""这是读取excel表格函数:param exc_path: 用例文件的路径:param sheetname: 用例表单的名字:return:"""wb = load_workbook(exc_path)sh = wb[sheetname]cases = list(sh.values) # 所有的用例的列表 [(第一行-title),(第二行用例),(),()]title = cases[0] # 得到标题行list_case = []for case in cases[1:]:data = dict(zip(title,case)) # 第一条用例的字典list_case.append(data) # 每一条用例追加到列表里。return list_case# 简化列表推导式?
# cases = list(sh.values) # 所有的用例的列表 [(第一行-title),(第二行用例),(),()]
# title = cases[0] # 得到标题行
# list_case = [ dict(zip(title,case)) for case in cases[1:]]if __name__ == '__main__':exc_path = Path(__file__).absolute().parent / "testcase65.xlsx"print(read_data(exc_path, "cart"))相关文章:
python 操作excel(openpyxl.load_workbook)、excel操作封装
操作excel 其他的库: xlrd xlwt : 过时了,只能操作xls后缀的文件。pandas:大数据测试 数据分析项目会用。 openpyxl:第三方库 支持的格式有:.xlsx、.xlsm、.xltx、.xltm,l不支持.xls文件格式…...
MySQL系统参数配置实战:生产环境优化
引言: MySQL作为广泛应用的关系型数据库,其系统参数配置直接影响着数据库的性能、稳定性以及资源利用率。本文旨在深入探讨MySQL的核心系统参数,并提供一份面向生产环境的配置建议,以帮助运维人员更好地优化数据库性能࿰…...
判断列表中每一个元素的个数
1.使用循环 nums [1, 1, 1, 2, 2, 3]# 构建一个空字典来存储元素和它们出现的次数 count_dict {}# 遍历列表,更新字典中每个元素出现的次数 for num in nums:if num in count_dict:count_dict[num] 1else:count_dict[num] 1# 输出统计结果 for num, count in c…...
目标检测——PP-YOLOE算法解读
PP-YOLO系列,均是基于百度自研PaddlePaddle深度学习框架发布的算法,2020年基于YOLOv3改进发布PP-YOLO,2021年发布PP-YOLOv2和移动端检测算法PP-PicoDet,2022年发布PP-YOLOE和PP-YOLOE-R。由于均是一个系列,所以放一起解…...
每日一题 --- 螺旋矩阵 II[力扣][Go]
螺旋矩阵 II 题目:59. 螺旋矩阵 II - 力扣(LeetCode) 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 输入:n 3 输出…...
C语言自定义类型结构体
variable adj.易变的,多变的;时好时坏的;可变的,可调节的; (数)(数字)变量的;(植,动)变异的,变型的࿱…...
【SpringBoot框架篇】37.使用gRPC实现远程服务调用
文章目录 RPC简介gPRC简介protobuf1.文件编写规范2.字段类型3.定义服务(Services) 在Spring Boot中使用grpc1.父工程pom配置2.grpc-api模块2.1.pom配置2.2.proto文件编写2.3.把proto文件编译成class文件 3.grpc-server模块3.1.pom文件和application.yaml3.2.实现grpc-api模块的…...
投资的三个匹配
许多人亏钱都是犯了同样错误,要么对投资的预期过高,要么是投资期限不匹配,要么是波动承受能力不匹配。投资想要赚钱,先解决匹配问题。 1.预期收益率要匹配 就是明确自己做投资,每年想赚多少钱。凡事都要有个目标&…...
[Netty实践] 请求响应同步实现
目录 一、介绍 二、依赖引入 三、公共部分实现 四、server端实现 五、client端实现 六、测试 一、介绍 本片文章将实现请求响应同步,什么是请求响应同步呢?就是当我们发起一个请求时,希望能够在一定时间内同步(线程阻塞&am…...
Java进阶—哈希冲突的解决
1. 什么是哈希冲突 哈希函数:哈希函数是一种将输入数据(键)映射到固定大小范围的输出值(哈希值)的函数。哈希函数通常用于存储 数据存储和检索领域,例如哈希表中。 哈希表:哈希表(Hash Table),也成为哈希映射(Hash Map)或字典&…...
css的border详解
CSS的border属性是一个简写属性,用于设置以下四个边框属性: border-width:定义边框的宽度。可以使用具体的像素值,或者使用预定义的关键字如thin、medium和thick。border-width不支持百分比值。默认情况下,边框的宽度是…...
如何保障消息一定能发送到RabbitMQ?
我们知道,RabbitMQ的消息最终是存储在Queue上的,而在Queue之前还要经过Exchange,那么这个过程中就有两个地方可能导致消息丢失。第一个是Producer到Exchange的过程,第二个是Exchange到Queue的过程。 为了解决这个问题,…...
【web前端】CSS语法
CSS语法 1. CSS语法格式 通常情况下语法格式如下: 选择器{属性名:属性值;属性名:属性值;属性名:属性值;... }2. CSS添加方式 2.1 行内样式 直接将样式写在本行的标签内。 <h1><p style"font-size: 48px; color:red;";>行内样式测试</p></…...
JS+CSS3点击粒子烟花动画js特效
JSCSS3点击粒子烟花动画js特效 JSCSS3点击粒子烟花动画js特效...
docker镜像复制与常见命令
一、前言 最近通过阿里的镜像仓库远程拉取镜像,发现以前的版本不见了,拉取了最新的镜像,有发现版本不配问题。那么想使用老版本的镜像那就要从别的环境获取。于是就需要进行离线镜像复制,打包,上传,重新导入…...
如何在linux环境上部署单机ES(以8.12.2版本为例)
ES安装(以8.12.2版本为例) 首先创建好对应的文件夹然后在对应的文件夹下执行依次这些命令 1.wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.12.2-linux-x86_64.tar.gz 2.wget https://artifacts.elastic.co/downloads/…...
如何利用人工智能技术实现企业营销效率提升10倍(下)
01. AI在私域运营中可扮演重要角色 私域用户体验历程中的不满,对企业来说,无疑是一记沉重的打击。这些不满不仅会让用户感到失望和沮丧,更会在无形中侵蚀企业的各个环节,给业务带来不可估量的损失。 在私域环境中,每…...
【PHP + 代码审计】数组函数
🍬 博主介绍👨🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收…...
Keepalive与idle监测及性能优化
Keepalive 与 idle监测 Keepalive(保活): Keepalive 是一种机制,通常用于TCP/IP网络。它的目的是确保连接双方都知道对方仍然存在并且连接是活动的。这是通过定期发送控制消息(称为keepalive消息)实现的。如果在预定时…...
DS-红黑树(RBTree)
一.红黑树 1.1 红黑树的起源 当对对AVL树做一些结构修改的操作时候,性能较为低下,比如:插入时要维护其绝对平衡,旋转的次数比较多,更差的是在删除时,有可能一直要让旋转持续到根的位置。 因此1972年Rudolf…...
GraalVM静态镜像上线前必做的5项内存安全审计(含JFR采样脚本、heapdump解析模板、容器OOMKilled溯源指南)
第一章:GraalVM静态镜像内存安全审计的必要性与认知重构传统JVM应用依赖动态类加载、反射和运行时代码生成,其内存布局在启动后持续演化,而GraalVM Native Image通过AOT编译将Java应用构建成静态可执行镜像,彻底剥离了JVM运行时。…...
从源码到DLL:手把手教你将ZeroMQ 4.3.2编译成可复用的动态库(附常见项目引用配置)
从源码到工程化:ZeroMQ动态库编译与项目集成实战指南 当你第一次尝试将ZeroMQ引入C项目时,是否遇到过这样的困境:明明按照教程编译出了libzmq.dll,却在项目链接时频频遭遇"无法解析的外部符号"或"找不到DLL"错…...
WRKFLW终极指南:10分钟学会本地运行GitHub Actions工作流
WRKFLW终极指南:10分钟学会本地运行GitHub Actions工作流 【免费下载链接】wrkflw Validate and Run GitHub Actions locally. 项目地址: https://gitcode.com/gh_mirrors/wr/wrkflw 想要在本地验证和运行GitHub Actions工作流吗?WRKFLW是你的终极…...
如何突破Cursor AI使用限制:提升开发效率的完整解决方案
如何突破Cursor AI使用限制:提升开发效率的完整解决方案 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your t…...
FPGA实战:14位高速DAC的Verilog代码设计与EMC优化全解析(Vivado平台)
1. 高速DAC设计基础与核心挑战 在FPGA信号处理系统中,14位高速DAC(如AD9744)的设计往往面临两个核心矛盾:时序收敛与信号完整性。我曾在多个项目中遇到这样的场景:当DAC时钟频率超过100MHz时,输出波形会出现…...
3种高效方法:快速部署BetterNCM插件管理器
3种高效方法:快速部署BetterNCM插件管理器 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer BetterNCM-Installer是一款专为网易云音乐客户端设计的插件管理器,提…...
海康工业相机LabVIEW二次开发实战——参数配置优化与图像高效存储
1. 海康工业相机与LabVIEW开发环境搭建 第一次接触海康工业相机时,我也被它丰富的功能接口和复杂的参数体系搞得晕头转向。但实际用LabVIEW开发后发现,只要掌握几个关键点,就能快速上手。海康官方提供的MVS客户端是个好东西,安装后…...
模数OPC社区在北京亦庄正式启航
打造AI创业“超级孵化器”,首批迎来20个创业团队入驻4月8日,在北京经济技术开发区(简称“北京经开区”,又称“北京亦庄”)举办的AI FUTURE北京亦庄AI未来大会上,一个全新的AI创业孵化空间——模数OPC&#…...
S2-Pro辅助3D建模与场景描述:连接自然语言与Blender脚本生成
S2-Pro辅助3D建模与场景描述:连接自然语言与Blender脚本生成 1. 当3D建模遇上自然语言 想象一下这样的场景:你脑海中浮现出一个充满未来感的客厅设计,但打开Blender后却不知从何下手。传统3D建模需要掌握复杂软件操作和脚本编写,…...
如何用readme.so快速制作专业README:揭秘实时预览与Markdown同步技术
如何用readme.so快速制作专业README:揭秘实时预览与Markdown同步技术 【免费下载链接】readme.so An online drag-and-drop editor to easily build READMEs 项目地址: https://gitcode.com/gh_mirrors/re/readme.so readme.so是一款功能强大的在线拖放编辑器…...
