Python —— excel文件操作(超详细)

news2024/11/24 16:36:19

背景

很多公司还是用excel去管理测试用例的,所以为了减少重复繁琐的导出导出工作,学会如何用代码操作excel表格很实用~

1、读取excel文件基本步骤

1、操作excel的一些库

1、xlrd:读取库,xlwt:写入,现在基本不用,因为只能处理.xls这种格式的数据

2、使用openpyxl库:不支持的 .xls格式,支持的格式:.xlsx、.xlsm、.xltx、.xltm,可以将.xls 转化为 xlsx格式

        - 安装openpyxl,使用 pip install openpyxl

        - 导入:import | from  openpyxl  import  xxx

2、读取的步骤

1、读取单元格数据

  1. 获取表格的工作簿对象(用到 openpyxl中的load_workbook模块)
  2. 得到表单,通过sheet名称 — sheet
  3. 获取单元格 — cell
  4. 获取单元格数据 — cell.value

实战演练:

excel表格如下:

代码实战:

from openpyxl import load_workbook
import pathlib

# 获取excel的相对路径
cur_path = pathlib.Path(__file__).absolute()
excel_path = cur_path.parent/"testcase64.xlsx"

# 第一步,获取表格的工作簿对象
wb = load_workbook(excel_path)
print(wb) # <openpyxl.workbook.workbook.Workbook object at 0x03EFCD60>

# 第二步,得到表单——sheet
sheet = wb["login"]
print(sheet)

# 第三步,获取单元格数据
cell = sheet.cell(row=1,column=3)
print(cell)

# 第四步,获取单元格数据 -- value
cell_value = sheet.cell(row=2,column=2).value
print(cell_value)   # 输出:登录正常

# 获取表单中所有的数据 -- 转化为列表
# 因为 sheet.values的输出是“<generator object Worksheet.values at 0x03817840” > 就是一个生成器,可以转化为列表的形式
datas = list(sheet.values)
print(datas)    # 是一个列表,每一个数据都是元组
'''
[
('id', 'title', 'method', 'header', 'url', 'data', 'expected'), 
(1, '登录正常', 'post', '{"Content-Type":"application/json"}', 'https://openapiv5.ketangpai.com//UserApi/login', '{"email":"2378807189@qq.com ","password":"lemon123456 ","remember":"0","code":"","mobile":"","type":"login","reqtimestamp":1695045752424}', '{"status":1,"code":10000,"message":"访问成功","data":{"token":"skjdaskjhd"}'), 
(2, '登录异常', 'post', '{"Content-Type":"application/json"}', 'https://openapiv6.ketangpai.com//UserApi/login', '{"email":"2378807189@qq.com ","password":"lemon","remember":"0","code":"","mobile":"","type":"login","reqtimestamp":1695045752424}', '{"status":0,"code":"30508","message":"登录失败"}')
]
'''

'''
全部读取的数据转化为项目里需要的格式数据
'''
# 第一步,取出标题
title = datas[0]

# 第二步,再一次获取后续的每一行数据,跟title压缩成字典
case_list = []
for case in datas[1:]:
    case_dict = dict(zip(title,case))
    case_list.append(case_dict)
print(case_list)

# 通过列表推导式来遍历
case_list1 = []
case_list1 = [case_list1.append(dict(zip(title,case))) for case in datas]
print(case_list)

 2、读取excel文件的优化

优化思路,代码分层思想:按照不同的功能代码进行不同包的管理(自动化框架的结构):

  1. 工具层:tools/common/util,封装好的公共方法,类同于Jmeter里的函数助手,比如对excel读取数据的处理过程
  2. 测试数据层:data/testdata,放测试数据,例如:txt文件、excel表格等
  3. 测试用例层:主要维护用例(pytest框架主要做的事情
  4. 测试结果输出:如 测试报告、测试日志
  5. 入口文件:main.py、run.py一般放在最外层

优化实战:

1、按照分层思想,新建data层和tools层,并完善其中的文件,参考如下图片:

2、将获取excel_path和获取数据的方式分别写到handle_excel文件和handle_path两个文件中,如下:

'''
 handle_excel文件
'''
from openpyxl import load_workbook
from d11_excel操作和pytest框架.tools.handle_path import exce_path

def read_excel(filename, sheet)
    wb = load_workbook(filename)
    sheet = wb[sheet]
    datas_list = list(sheet.values)
    title = datas_list[0]
    list_case = []

    for case in datas_list[1:]:
        tep_dict = dict(zip(title,case))
        list_case.append(tep_dict)
    return list_case
'''
handle_path.py
'''
import pathlib

cur_path = pathlib.Path(__file__).absolute()
exce_path = cur_path.parent.parent/"data"/"testcase64.xlsx"

if __name__ == '__main__':
    print(exce_path)

3、一些扩展(如何快速查看excel表格中的数据类型)

可以通过debug的方式,看到我们从excel中读取的数据的类型,举例如下:

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

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

相关文章

win10 Baichuan2-7B-Chat-4bits 上部署 百川2-7B-对话模型-4bits量化版

搞了两天才搞清楚跑通 好难呢,个人电脑 win10 ,6GB显存 个人感觉 生成速度很慢,数学能力不怎么行 没有ChatGLM2-6B 强,逻辑还行, 要求: 我的部署流程 1.下载模型 ,下载所有文件 然后 放到新建的model目录 https://huggingface.co/baichuan-inc/Baichuan2-7B-Chat-4bits/tr…

力扣刷题-数组-二分查找总结

前言 二分查找的使用前提/一般何时想到使用二分查找&#xff1a;数组为有序数组、数组中重复元素&#xff08;因为一旦有重复元素&#xff0c;使用二分查找法返回的元素下标可能不是唯一的&#xff09; 二分查找的关键 / 不容易写混乱的关键 / 谨记的不变量&#xff1a;区间定…

【大数据之Kafka】十六、Kafka集成外部系统之集成Flume

Flume 是一个在大数据开发中非常常用的组件。可以用于 Kafka 的生产者&#xff0c;也可以用于 Kafka 的消费者。 Flume安装和部署&#xff1a;https://blog.csdn.net/qq_18625571/article/details/131678589?spm1001.2014.3001.5501 1 Flume生产者 &#xff08;1&#xff09…

绿色科技:可持续发展的创新解决方案

标题绿色科技&#xff1a;可持续发展的创新解决方案 摘要引言绿色能源创新1. 太阳能和风能2. 储能技术 可再生资源管理3. 智能农业4. 循环经济 智能城市的未来5. 智能交通6. 城市感知 可持续生活方式7. 可持续建筑8. 智能家居 总结参考资料 博主 默语带您 Go to New World. ✍ …

短视频矩阵系统,短视频矩阵源码技术开发

开发短视频矩阵系统的源码需要以下步骤&#xff1a; 确定系统需求&#xff1a;根据客户的需求&#xff0c;确定系统的功能和特点&#xff0c;例如用户注册登录、视频上传、视频浏览、评论点赞等。 设计系统架构&#xff1a;根据系统需求&#xff0c;设计系统的整体架构&#x…

用户与权限管理

文章目录 用户与权限管理1. 用户管理1.1 MYSQL用户1.2 登录MySQL服务器1.3 创建用户1.4 修改用户1.5 删除用户1.6 修改密码1. 修改当前用户密码2. 修改其他用户密码 1.7 MYSQL8密码管理 2. 权限管理2.1 权限列表2.2 授予权限的原则2.3 授予权限2.4 查看权限2.5 收回权限 3. 权限…

C语言文件的相关操作

C语言中文件的相关操作 文件的打开 使用文件的打开函数需要引入这个头文件&#xff1a;#include <fcntl.h> open函数 int open(char const *pathname, int flags, mode_t mode) 功能&#xff1a;打开已有的文件或者创建新文件参数 pathname&#xff1a;文件路径名&…

IDEA开发工具技巧

1.1 IDEA相关插件 idea插件下载地址&#xff1a;https://plugins.jetbrains.com/ 开发必装插件&#xff1a; &#xff08;1&#xff09; 快速查找api接口 RestfulTool 插件&#xff0c;推荐指数⭐⭐⭐⭐⭐ [RestfulTool搜索插件使用详解](https://blog.csdn.net/weixin_450147…

java面向对象(九)

文章目录 一、abstract的应用举例二、接口的使用1.概念2.代码案例 三、try-catch-finally使用步骤1.注意点2.finally注意点 四、异常处理的方式二&#xff1a;throws 异常类型1.如图所示&#xff1a;2.代码如下&#xff1a; 提示&#xff1a;以下是本篇文章正文内容&#xff0…

如何通过一键导出导入数据实现批量重命名文件名称

在日常办公中&#xff0c;我们经常需要对大量的文件进行重命名&#xff0c;以便更好地管理和查找文件。而且&#xff0c;有时候我们还需要将文件名称翻译成其他语言&#xff0c;以适应不同的工作需求。如何高效地完成这项任务呢&#xff1f;接下来&#xff0c;我将介绍一种方法…

How AI can revolutionise science AI如何彻底改变科学 | 经济学人20230916版双语精翻

本期重磅推荐&#xff1a;2023年9月16日《经济学人》封面文章双语精读&#xff1a;How AI can revolutionise science&#xff08;《AI将如何彻底改变科学》&#xff09; How AI can revolutionise science AI将如何彻底改变科学 The technology is being applied in many fiel…

基于Yolov8的工业端面小目标计数检测(1)

1.端面小目标计数数据集介绍 工业端面小目标计数类别:一类,类别名object 数据集大小:训练集864张,验证集98张 缺陷特点:小目标计数,检测难度大,如下图所示; 1.1 小目标定义 1)以物体检测领域的通用数据集COCO物体定义为例,小目标是指小于3232个像素点(中物体是指…

SSM - Springboot - MyBatis-Plus 全栈体系(十二)

第二章 SpringFramework 六、Spring 声明式事务 1. 声明式事务概念 1. 编程式事务 编程式事务是指手动编写程序来管理事务&#xff0c;即通过编写代码的方式直接控制事务的提交和回滚。在 Java 中&#xff0c;通常使用事务管理器(如 Spring 中的 PlatformTransactionManage…

使用注解方式和XML配置方式完成AOP编程

第一种方式:基于注解 beanx10.xml <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:context"http:/…

Vue中如何封装组件,如何进行跨组件通信

封装组件和跨组件通信是Vue.js中非常重要的概念&#xff0c;它们有助于构建模块化、可维护和可扩展的应用程序。本文将深入讨论如何在Vue中封装组件以及如何实现跨组件通信&#xff0c;同时提供示例代码来帮助您更好地理解这些概念。 第一部分&#xff1a;Vue组件的封装 在V…

负载均衡在线oj

1.项目源码&#x1f339;load-balanced-online-oj fortianyang/project - 码云 - 开源中国 (gitee.com) 2.相关技术⭐ ⭕C STL 标准库 ⭕Boost 准标准库(字符串切割) ⭕cpp-httplib 第三方开源网络库 ⭕ctemplate 第三方开源前端网页渲染库 ⭕jsoncpp 第三方开源序列化、…

Linux下git安装及使用

Linux下Git使用 1. git的安装 sudo apt install git安装完&#xff0c;使用git --version查看git版本 2. 配置git git config --global user.name "Your Name“ ##配置用户 git config --global user.email emailexample.com ##配置邮箱git config --global --list …

MySQL学习笔记1

任务背景&#xff1a; 将原来的数据库从原来的MySQL-5.5 升级到现在的MySQL-5.7&#xff0c;并保证数据完整。 1&#xff09;不同版本MySQL的安装&#xff1b;yum glibc、源码安装&#xff0c;是企业100%要用到的。 2&#xff09;MySQL数据库版本升级&#xff1b;&#xff08…

【电源专题】明明芯片是写了能恒流充电,但为什么实际恒流充电电流在慢慢下降?

本案例发生在两个不同产品做对比时发现了差异。其实两个产品使用的 充电芯片是一致的,但是实际测试的情况下产品一在恒流充电过程中,电流正常保持,而产品二在恒流充电过程中电流在慢慢下降。 那么是不是说明产品二有什么问题呢?本来应该恒定电流充电的,为什么充电电流还能…

机器学习入门:从算法到实际应用

机器学习入门&#xff1a;从算法到实际应用 机器学习入门&#xff1a;从算法到实际应用摘要引言机器学习基础1. 什么是机器学习&#xff1f;2. 监督学习 vs. 无监督学习 机器学习算法3. 线性回归4. 决策树和随机森林 数据准备和模型训练5. 数据预处理6. 模型训练与调优 实际应用…