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


    背景

    很多公司还是用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表格如下:

    代码实战:

    1. from openpyxl import load_workbook
    2. import pathlib
    3. # 获取excel的相对路径
    4. cur_path = pathlib.Path(__file__).absolute()
    5. excel_path = cur_path.parent/"testcase64.xlsx"
    6. # 第一步,获取表格的工作簿对象
    7. wb = load_workbook(excel_path)
    8. print(wb) #
    9. # 第二步,得到表单——sheet
    10. sheet = wb["login"]
    11. print(sheet)
    12. # 第三步,获取单元格数据
    13. cell = sheet.cell(row=1,column=3)
    14. print(cell)
    15. # 第四步,获取单元格数据 -- value
    16. cell_value = sheet.cell(row=2,column=2).value
    17. print(cell_value) # 输出:登录正常
    18. # 获取表单中所有的数据 -- 转化为列表
    19. # 因为 sheet.values的输出是“ 就是一个生成器,可以转化为列表的形式
    20. datas = list(sheet.values)
    21. print(datas) # 是一个列表,每一个数据都是元组
    22. '''
    23. [
    24. ('id', 'title', 'method', 'header', 'url', 'data', 'expected'),
    25. (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"}'),
    26. (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":"登录失败"}')
    27. ]
    28. '''
    29. '''
    30. 全部读取的数据转化为项目里需要的格式数据
    31. '''
    32. # 第一步,取出标题
    33. title = datas[0]
    34. # 第二步,再一次获取后续的每一行数据,跟title压缩成字典
    35. case_list = []
    36. for case in datas[1:]:
    37. case_dict = dict(zip(title,case))
    38. case_list.append(case_dict)
    39. print(case_list)
    40. # 通过列表推导式来遍历
    41. case_list1 = []
    42. case_list1 = [case_list1.append(dict(zip(title,case))) for case in datas]
    43. 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两个文件中,如下:

    1. '''
    2. handle_excel文件
    3. '''
    4. from openpyxl import load_workbook
    5. from d11_excel操作和pytest框架.tools.handle_path import exce_path
    6. def read_excel(filename, sheet)
    7. wb = load_workbook(filename)
    8. sheet = wb[sheet]
    9. datas_list = list(sheet.values)
    10. title = datas_list[0]
    11. list_case = []
    12. for case in datas_list[1:]:
    13. tep_dict = dict(zip(title,case))
    14. list_case.append(tep_dict)
    15. return list_case
    1. '''
    2. handle_path.py
    3. '''
    4. import pathlib
    5. cur_path = pathlib.Path(__file__).absolute()
    6. exce_path = cur_path.parent.parent/"data"/"testcase64.xlsx"
    7. if __name__ == '__main__':
    8. print(exce_path)

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

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

  • 相关阅读:
    TensorFlow(1):深度学习的介绍
    【MATLAB源码-第50期】基于simulink的BPSK调制解调仿真,输出误码率。
    速看!!带你揭秘3D建模行业内幕!!
    MIPI CSI-2笔记(10) -- Low Level Protocol(延迟降低、传输效率增强特性LRTE)
    深度学习训练营实现minist手写数字识别
    【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 字符串筛选排序(100分) - 三语言AC题解(Python/Java/Cpp)
    DDD之落地实践
    DeepStream--测试lpdnet车牌检测模型
    Argo CD快速入门教程(gitee+argo+k8s)
    网络编程——分布式远程调用
  • 原文地址:https://blog.csdn.net/lzf_hlh/article/details/133126213