3种方法手把手教你从Excel读取数据(一)

2020-08-29  本文已影响0人  sai德很黑

在实现接口自动化测试过程中,经常要使用返回的数据来验证接口是否正常,而测试数据和代码一起存放是显然不适合的。作为测试人员第一反应就是Excel,那写到Excel中的数据怎么再读取出来呢?带着这个疑问我们接着往下看:

这是我们存到Excel的数据:


20200829151331.png

解决方法:

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

附上一张截图:


20200829155402.png

搞定!!!
似不似很简单啊,hhh~~~
最后一个pandas更简单,但是我还在学习中哈哈哈~~~,等我理顺了,再分享出来,持续关注哦!!!

2020 2.4优化:

持续更新中~~~

上一篇下一篇

猜你喜欢

热点阅读