3种方法手把手教你从Excel读取数据(一)
2020-08-29 本文已影响0人
sai德很黑
在实现接口自动化测试过程中,经常要使用返回的数据来验证接口是否正常,而测试数据和代码一起存放是显然不适合的。作为测试人员第一反应就是Excel,那写到Excel中的数据怎么再读取出来呢?带着这个疑问我们接着往下看:
这是我们存到Excel的数据:

解决方法:
python第三方库 xlrd、openpyxl、pandas
方法一:xlrd(只能读取,不能写入)
注意:此方法是以list嵌套list,取值某个值用list里面索引
代码附上
import xlrd
class ReadExcelOne:
def read_excel(self,file_path,sheet_name):
'''
file_path: 需要读取取文件的路径
sheet_name: 需要读取文件的表单名称
'''
result=[]
wb=xlrd.open_workbook(file_path)
sheet=wb.sheet_by_name(sheet_name)
for item in range(1,sheet.nrows):# 1:写了title就默认以1开头,如果没写title就可以省略, sheet.nrows获取总行数
result.append(sheet.row_values(item)) # row_values:返回所有单元格组成一个list
return result
if __name__ == '__main__':
data_1=ReadExcelOne().read_excel('dome.xlsx','人员信息表')
print(data_1)
运行结果:
[['张三', 22.0, '广东', '开发', '12k', '写代码', ''], ['李四', 23.0, '湖南', '运营', '11k', '提需求', ''], ['王五', 28.0, '江西', '人事', '10k', '招聘', '']]
Process finished with exit code 0
方法二:openxlpy(可读可写)这是小编目前用的方法😂😂😂
注意:此方法是以list嵌套dict,取值某个值用key
代码如下:
from openpyxl import load_workbook
class ReadExcelTwo:
def read_excel(self,file_path,sheet_name):
result=[]
wb=load_workbook(file_path)
sheet=wb[sheet_name]
for item in range(2,sheet.max_row+1):#以openpyxl这种方式默认从1开始读取,这里是要跳过title所以从2开始,sheet.max_row:获取最大行,range方法取头不取尾,所以+1
sub_data={}
sub_data['姓名']=sheet.cell(item,1).value
sub_data['年龄']=sheet.cell(item,2).value
sub_data['籍贯']=sheet.cell(item,3).value
sub_data['职位']=sheet.cell(item,4).value
sub_data['薪资']=sheet.cell(item,5).value
sub_data['工作内容'] = sheet.cell(item, 6).value
sub_data['备注']=sheet.cell(item, 7).value
sub_data['id']=sheet.cell(item, 8).value #注:这个是新增加的,便于后面将数据写入excel使用,excel没写出来
result.append(sub_data)
return resultt
if __name__ == '__main__':
data_2=ReadExcelTwo().read_excel('dome.xlsx','人员信息表')
print(data_2)
运行结果:
[{'姓名': '张三', '年龄': 22, '籍贯': '广东', '职位': '开发', '薪资': '12k', '工作内容': '写代码','id': 1}, {'姓名': '李四', '年龄': 23, '籍贯': '湖南', '职位': '运营', '薪资': '11k', '工作内容': '提需求','id': 2}, {'姓名': '王五', '年龄': 28, '籍贯': '江西', '职位': '人事', '薪资': '10k', '工作内容': '招聘','id': 3}]
Process finished with exit code 0
拓展:openpyxl将结果写回Excel(可用于断言时判断测试通过还是失败时将测试结果写回Excel)
注意:运行时一定要把Excel关闭,不然会报错!!!
代码如下:
from openpyxl import load_workbook
class ReadExcelTwo:
def write_excel(self,file_path,sheet_name,j,value):
'''
j:要写入的列号,在实际运用中可以写死,
value:要写入的值(可以多个)
'''
data = DoExcel(file_path, sheet_name).Do_excel()
for item in data:
wb=load_workbook(file_path)
sheet=wb[sheet_name]
sheet.cell(item['id']+1,j).value=value
wb.save(file_path) #保存
if __name__ == '__main__':
ReadExcelTwo().write_excel(r'dome.xlsx','人员信息表',7,'搞事情,搞事情~~')
data_2=ReadExcelTwo().read_excel('dome.xlsx', '人员信息表')
print(data_2)
运行结果:
[{'姓名': '张三', '年龄': 22, '籍贯': '广东', '职位': '开发', '薪资': '12k', '工作内容': '写代码', '备注': '搞事情,搞事情~~'}, {'姓名': '李四', '年龄': 23, '籍贯': '湖南', '职位': '运营', '薪资': '11k', '工作内容': '提需求', '备注': '搞事情,搞事情~~'}, {'姓名': '王五', '年龄': 28, '籍贯': '江西', '职位': '人事', '薪资': '10k', '工作内容': '招聘', '备注': '搞事情,搞事情~~'}]
Process finished with exit code 0
附上一张截图:

搞定!!!
似不似很简单啊,hhh~~~
最后一个pandas更简单,但是我还在学习中哈哈哈~~~,等我理顺了,再分享出来,持续关注哦!!!
2020 2.4优化:
- 方法一中xlrd2.0.1库以上版本不支持.xlsx格式文件
- 方法二中读取excel新增了id列,写入excel方法有优化,目前还没有实践,若有错误请留言
持续更新中~~~