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

python 复制代码
# 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
python 复制代码
# 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:每一条用例 == 从第二行开始的每一行
python 复制代码
from openpyxl import load_workbook
from pathlib import Path


exc_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、返回值:
python 复制代码
from pathlib import Path

from openpyxl import load_workbook

def 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"))
相关推荐
waterHBO2 小时前
python 爬虫 selenium 笔记
爬虫·python·selenium
编程零零七3 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
AIAdvocate5 小时前
Pandas_数据结构详解
数据结构·python·pandas
小言从不摸鱼5 小时前
【AI大模型】ChatGPT模型原理介绍(下)
人工智能·python·深度学习·机器学习·自然语言处理·chatgpt
FreakStudio7 小时前
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
python·嵌入式·面向对象·电子diy
redcocal8 小时前
地平线秋招
python·嵌入式硬件·算法·fpga开发·求职招聘
artificiali8 小时前
Anaconda配置pytorch的基本操作
人工智能·pytorch·python
RaidenQ8 小时前
2024.9.13 Python与图像处理新国大EE5731课程大作业,索贝尔算子计算边缘,高斯核模糊边缘,Haar小波计算边缘
图像处理·python·算法·课程设计
花生了什么树~.9 小时前
python基础知识(六)--字典遍历、公共运算符、公共方法、函数、变量分类、参数分类、拆包、引用
开发语言·python
Trouvaille ~9 小时前
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧
图像处理·python·机器学习·numpy·信号处理·时间序列分析·科学计算