Python openpyxl库之Excel读取

上两篇简单介绍了unintest框架,但是用例及测试数据都写在了代码内,如果需要修改数据或查看的话需要去代码里面找,会有点麻烦。接下来结合Excel实际应用进行数据分离;现在主流的测试用例数据都是写在Excel中。
需要安装第三方库openpyxl,只支持xlsx的格式

pip install openpyxl

首先把用例整理到Excel表格,命名为case.xlsx
在这里插入图片描述
在这里插入图片描述
打开文件使用openpyxl.load_workbook(‘case.xlsx’).这里用变量work_book接收

work_book=openpyxl.load_workbook('case.xlsx')#打开文件
print(work_book)
结果如下:是一个对象
<openpyxl.workbook.workbook.Workbook object at 0x037A7C10>

但是表内容是由多个Sheet表单组成,所以需要先获取到表单,获取的方式有很多,这里使用对象[‘表单名’]的形式去获取
在这里插入图片描述

work_book=openpyxl.load_workbook('case.xlsx')#打开文件
sheet=work_book['Sheet1']#获取表单
print(sheet)

结果如下:
<Worksheet "Sheet1">

需要注意表单是区分大小写的,否则会找不到,如下:

import openpyxl
work_book=openpyxl.load_workbook('case.xlsx')v
sheet=work_book['sheet1']
print(sheet)

结果如下:
KeyError: 'Worksheet sheet1 does not exist.'

——————————————————————————————————————————————
获取到整个表单后获取里面的数据,使用sheet.cell(row,column)方法,需要传参(row=行,column=列)
在这里插入图片描述
如下我想获取第一行第一列的数据:

import openpyxl
work_book=openpyxl.load_workbook('case.xlsx')
sheet=work_book['Sheet1']
data=sheet.cell(1,1)#获取第一行第一列的数据,这里结果是一个单元格,并不是要得到的数据
print(data)
print(data.value)


结果如下:
<Cell 'Sheet1'.A1>
case_id

获取所有行的数据可以使用sheet.rows。

import openpyxl
work_book=openpyxl.load_workbook('case.xlsx')
sheet=work_book['Sheet1']
data=sheet.rows
print(data)#generator object数据类型可以转换成列表
printlist(data))#转换成列表

结果如下:
<generator object Worksheet._cells_by_row at 0x036FD8F0>

[(<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>, <Cell 'Sheet1'.C1>, <Cell 'Sheet1'.D1>, <Cell 'Sheet1'.E1>), 
(<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>, <Cell 'Sheet1'.D2>, <Cell 'Sheet1'.E2>), 
(<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.C3>, <Cell 'Sheet1'.D3>, <Cell 'Sheet1'.E3>),
(<Cell 'Sheet1'.A4>, <Cell 'Sheet1'.B4>, <Cell 'Sheet1'.C4>, <Cell 'Sheet1'.D4>, <Cell 'Sheet1'.E4>),
(<Cell 'Sheet1'.A5>, <Cell 'Sheet1'.B5>, <Cell 'Sheet1'.C5>, <Cell 'Sheet1'.D5>, <Cell 'Sheet1'.E5>),
(<Cell 'Sheet1'.A6>, <Cell 'Sheet1'.B6>, <Cell 'Sheet1'.C6>, <Cell 'Sheet1'.D6>, <Cell 'Sheet1'.E6>),
(<Cell 'Sheet1'.A7>, <Cell 'Sheet1'.B7>, <Cell 'Sheet1'.C7>, <Cell 'Sheet1'.D7>, <Cell 'Sheet1'.E7>)]

这时候获取的是所有的单元格由元组的形式存放在一个列表内,如果想获取所有的数据可以用for循环实现,如下:获取数据后以列表的形式储存。

import openpyxl
work_book=openpyxl.load_workbook('case.xlsx')#打开文件
sheet=work_book['Sheet1']#获取表单
data=list(sheet.rows)#获取所有行
result=[]
for rows in data[1:]:#获取不包含标题的所有行的数据
    lis=[]
    for row in rows:
        lis.append(row.value)
    result.append(lis)
print(result)

结果如下:
[[1, '登录', '登录成功', "{'username':'admin','password':'123456'}", '登录成功'],
 [2, '登录', '登录失败', "{'username':'ADMIN','password':'123456'}", '用户名或密码错误'],
 [3, '登录', '登录失败', "{'username':' ','password':' '}", '用户名或密码为空'],
 [4, '注册', '注册成功', "{'phone':'13800138000','code':'1234'}", '注册成功'],
 [5, '注册', '注册失败', "{'phone':'13800138000','code':'1234'}", '手机号或验证码错误'],
 [6, '注册', '注册失败', "{'phone':'','code':'1234'}", '手机号或验证码为空']]

以字典的形式存储:

import openpyxl
work_book=openpyxl.load_workbook('case.xlsx')
sheet=work_book['Sheet1']
data=list(sheet.rows)
title=[]
result=[]
for key in data[0]:#标题
    title.append(key.value)#标题取出来
for rows in data[1:]:
    dic = {}
    for indx,row in enumerate(rows):
        dic[title[indx]]=row.value
    result.append(dic)
print(result)

结果如下:
[{'case_id': 1,
  'data': "{'username':'admin','password':'123456'}",
  'exceped': '登录成功',
  'module': '登录',
  'title': '登录成功'},
 {'case_id': 2,
  'data': "{'username':'ADMIN','password':'123456'}",
  'exceped': '用户名或密码错误',
  'module': '登录',
  'title': '登录失败'},
 {'case_id': 3,
  'data': "{'username':' ','password':' '}",
  'exceped': '用户名或密码为空',
  'module': '登录',
  'title': '登录失败'},
 {'case_id': 4,
  'data': "{'phone':'13800138000','code':'1234'}",
  'exceped': '注册成功',
  'module': '注册',
  'title': '注册成功'},
 {'case_id': 5,
  'data': "{'phone':'13800138000','code':'1234'}",
  'exceped': '手机号或验证码错误',
  'module': '注册',
  'title': '注册失败'},
 {'case_id': 6,
  'data': "{'phone':'','code':'1234'}",
  'exceped': '手机号或验证码为空',
  'module': '注册',
  'title': '注册失败'}]
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

久醉绕心弦,

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值