网站广告动图怎么做,网站建设需要注意哪些内容,安徽集团网站建设,wordpress的密码算法引言
我们在做接口测试#xff0c;经常会用到excel去管理测试数据#xff0c;对Excel的操作比较频繁#xff0c;那么使用python如何操作Excel文件的读与写呢#xff1f;由于之前讲的都是大的框框#xff0c;没有讲这么小的模块使用#xff0c;现在就化整为0的讲解。
读…引言
我们在做接口测试经常会用到excel去管理测试数据对Excel的操作比较频繁那么使用python如何操作Excel文件的读与写呢由于之前讲的都是大的框框没有讲这么小的模块使用现在就化整为0的讲解。
读写模块介绍
python有三个模块是对Excel文件的操作分别是openpyxl,xlrd和xlwt。下面简单的介绍一下各个模块的特点及使用案例。
xlrd
xlrd是用来从Excel中读写数据的但我平常只用它进行读操作写操作会遇到些问题。用xlrd进行读取比较方便流程和平常手动操作Excel一样打开工作簿(Workbook)选择工作表(sheets)然后操作单元格(cell)。下面举个例子例如要打开当前目录下名为”data.xlsx”的Excel文件选择第一张工作表然后读取第一行的全部内容并打印出来。Python代码如下
import os
import xlrd
from xlutils.copy import copy# 获取当前文件的绝对路径
curPath os.path.abspath(os.path.dirname(__file__))
print(curPath)
# 获取项目根目录
rootPath os.path.abspath(os.path.dirname(curPath))
print(rootPath)# 获取文件路径
file_path rAPItest_ddt\data\data.xls
file_path os.path.join(rootPath,file_path)
print(file_path)
#打开excel文件
dataxlrd.open_workbook(file_path)
#获取第一张工作表通过索引的方式
tabledata.sheets()[0]
#data_list用来存放数据
data_list[]
#将table中第一行的数据读取并添加到data_list中
data_list.extend(table.row_values(0))
#打印出第一行的全部数据
for item in data_list:print(item)# 写入数据
copy_data copy(data)
# 读取复制的excel的sheet页
copy_data_to_sheet copy_data.get_sheet(0)
# 通过get_sheet()获取的sheet有write()方法写入数据
copy_data_to_sheet.write(5,5,这是我写入的测试数据哈哈)
# 保存数据
copy_data.save(file_path)
运行结果
C:\Users\Administrator\Desktop\APItest_ddt
C:\Users\Administrator\Desktop
C:\Users\Administrator\Desktop\APItest_ddt/data/data.xls
地址
打开data.xls文件 在处理excel数据时发现了xlwt的局限性–不能写入超过65535行、256列的数据因为它只支持Excel 2003及之前的版本在这些版本的Excel中行数和列数有此限制这对于实际应用还是不够的。为此经过一番寻找发现了一个支持07/10/13版本Excel的openpyxl虽然功能很强大但是操作起来感觉没有xlwt方便。以上是xlrd的几个简单操作并且可以发现xlrd可以读也可以写的。只是写的话没那么方便。
xlwt
如果说xlrd不是一个单纯的Reader如果把xlrd中的后两个字符看成Reader那么xlwt后两个字符类似看成Writer那么xlwt就是一个纯粹的Writer了因为它只能对Excel进行写操作。xlwt和xlrd不光名字像连很多函数和操作格式也是完全相同。下面简要归纳一下常用操作。
import xlwt
# 新建一个Excel文件只能通过新建写入
dataxlwt.Workbook()
# 新建一个工作表
tabledata.add_sheet(name)
# 写入数据到A1单元格
table.write(0,0,u呵呵)
# 注意如果对同一个单元格重复操作会引发overwrite Exception想要取消该功能需要在添加工作表时指定为可覆盖像下面这样
tabledata.add_sheet(sheet1,cell_overwrite_okTrue)
# 保存
data.save(test.xls)
查看结果 openpyxl
该模块支持最新版的Excel文件格式对Excel文件具有响应的读写操作对此有专门的Reader和Writer两个类便于对Excel文件的操作。虽然如此但我一般还是用默认的workbook来进行操作。常用操作归纳如下
from openpyxl.reader.excel import load_workbookwbload_workbook(filenameropenpyxl_test.xlsx)import openpyxlif __name__ __main__:wb load_workbook(filenameropenpyxl_test.xlsx)# 显示所有工作表的名字sheet_name wb.get_sheet_names()print(sheet_name)# 取第一张表sheetnames wb.sheetnamesws wb[sheetnames[0]]# 显示表名表行数表列数print(Work Sheet Title:, ws.title)print(Work Sheet Rows:, ws.max_row)print(Work Sheet Cols:, ws.max_column)# 获取指定行的值如第三行row3_values []row3_cell_list list(ws.rows)[2]for cell in row3_cell_list:row3_values.append(cell.value)print(row3_values) # output:[A3, B3, C3, D3]# 获取所有行的数据# 建立存储数据的字典data {}# 获取表格所有值# 法1:for i in range(0, ws.max_row):every_row_values []every_row_cell_list list(ws.rows)[i]for cell in every_row_cell_list:every_row_values.append(cell.value)data[i 1] every_row_valuesprint(data)# {1: [A1, B1, C1, D1], 2: [A2, B2, C2, D2], 3: [A3, B3, C3, D3], 4: [A4, B4, C4, D4], 5: [A5, B5, C5, D5],# 6: [A6, B6, C6, D6], 7: [A7, B7, C7, D7], 8: [A8, B8, C8, D8], 9: [A9, B9, C9, D9], 10: [A10, B10, C10, D10],# 11: [A11, B11, C11, D11]}# 法2for row in ws.rows:line [cell.value for cell in row]print(line) # output:[A1, B1, C1, D1],[A2, B2, C2, D2], [A3, B3, C3, D3],[A4, B4, C4, D4], [A5, B5, C5, D5],[A6, B6, C6, D6],[A7, B7, C7, D7],[A8, B8, C8, D8],[A9, B9, C9, D9],[A10, B10, C10, D10],[A11, B11, C11, D11]# 获取某个区间的值例获得了以A3为左上角C6为右下角矩形区域的所有单元格# 法1使用rangedata1 {}for i in range(2, 6):every_row_values []every_row_cell_list list(ws.rows)[i]for cell in every_row_cell_list:every_row_values.append(cell.value)data1[i 1] every_row_valuesprint(data1)# output{3: [A3, B3, C3, D3], 4: [A4, B4, C4, D4], 5: [A5, B5, C5, D5], 6: [A6, B6, C6, D6]}# 法2:使用切片data_list []for row_cell in ws[A3:C6]:every_row_value []for cell in row_cell:every_row_value.append(cell.value)data_list.append(every_row_value)print(data_list) # output:[[A3, B3, C3], [A4, B4, C4], [A5, B5, C5], [A6, B6, C6]]# 测试写入数据wb load_workbook(filenameropenpyxl_test.xlsx)ws wb.active# 第一个sheet是wsws wb.worksheets[0]# 设置ws的名称ws.title range names# 向某个单元格中写入数据ws.cell(11,11).value uTest write data!!!# 最后保存文件wb.save(filenameropenpyxl_test.xlsx)
结果如下 封装读写
上面已经介绍了三个模块的使用那么在搭建接口测试框架的时候不可能这样写一方面不利于代码可读性与维护另一方面不雅观。所以要对零散的代码进行二次封装一下就是针对常用方法进行二次封装
import xlrd
from xlutils.copy import copy
import os
# 获取当前文件的绝对路径
curPath os.path.abspath(os.path.dirname(__file__))
print(curPath)
# 获取项目根目录
rootPath os.path.abspath(os.path.dirname(curPath))
print(rootPath)# 类中使用装饰器 classmethod定义方法是类方法
# 类中使用装饰器 staticmethod定义方法是静态方法class Operate_Excel(object):操作excel类# 定义构造函数创建对象自动执行def __init__(self,file_pathNone,sheet_idNone)::param file_path:如果没传值默认为excel路径:param sheet_id:如果没传值默认为第一个sheet页if file_path:# 成员变量self.file_path file_pathself.sheet_id sheet_idelse:self.file_path rdata/util_data/operate_excel.xls# 将文件目录拼接成绝对路径self.file_path os.path.join(rootPath,self.file_path)print(self.file_path)if sheet_id:self.sheet_id sheet_idelse:self.sheet_id 0# 调用成员方法self.sheet_table self.get_sheet()成员方法# 获取sheet页操作对象def get_sheet(self):data xlrd.open_workbook(self.file_path)sheet_table data.sheets()[self.sheet_id]return sheet_table# 获取sheet页的行数和列数返回的是一个元组def get_sheet_nrows_ncols(self):return self.sheet_table.nrows,self.sheet_table.ncols# 获取sheet页的行数def get_sheet_nrows(self):return self.sheet_table.nrows# 获取sheet页的列数def get_sheet_ncols(self):return self.sheet_table.ncols# 获取具体单元格的数据def get_sheet_cell(self,row,col)::params row: 单元格行值:params col: 单元格列值:return: cell_datacell_data self.sheet_table.cell_value(row,col)return cell_data# 写入数据到excel中def write_to_excel(self,row,col,values):# 打开excel文件读取数据句柄data xlrd.open_workbook(self.file_path)# 复制excelcopy_data copy(data)# 读取复制的excel的sheet页copy_data_to_sheet copy_data.get_sheet(0)# 通过get_sheet()获取的sheet有write()方法写入数据copy_data_to_sheet.write(row,col,values)# 保存数据copy_data.save(self.file_path)if __name__ __main__:read_xls Operate_Excel()print(获取excel表的行数与列数,返回元组格式: ,read_xls.get_sheet_nrows_ncols())print(获取excel表的行数: ,read_xls.get_sheet_nrows())print(获取excel表的列数: ,read_xls.get_sheet_ncols())print(获取excel表的单元格(1,1)的值: ,read_xls.get_sheet_cell(1,1))print(获取excel表的单元格(1,2)的值: ,read_xls.get_sheet_cell(1,2))print(获取excel表的单元格(2,2)的值: ,read_xls.get_sheet_cell(2,2))print(写入excel表的单元格(2,2)的值: ,read_xls.write_to_excel(8,8,test))
运行结果
获取excel表的行数与列数,返回元组格式: (18, 9)
获取excel表的行数: 18
获取excel表的列数: 9
获取excel表的单元格(1,1)的值: case_name01
获取excel表的单元格(1,2)的值: case_method01
获取excel表的单元格(2,2)的值: case_method02
写入excel表的单元格(2,2)的值: None
excel文件 总结
到此Excel读写功能已经介绍完以上功能大部分满足日常使用当然你也可以深入研究继续加入其它方法进来。
最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走 软件测试面试小程序
被百万人刷爆的软件测试题库谁用谁知道全网最全面试刷题小程序手机就可以刷题地铁上公交上卷起来
涵盖以下这些面试题板块 1、软件测试基础理论 2、web,app接口功能测试 3、网络 4、数据库 5、linux 6、web,app接口自动化 7、性能测试 8、编程基础9、hr面试题 10、开放性测试题11、安全测试12、计算机基础 这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你