python表格处理excel-【Python】如何处理Excel中的数据

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-26 09:12   41   0

我们平时在做自动化测试的时候,可能会涉及到从表格中去读取或者存储数据,我们除了可以使用openpyxl来操作excel,当然也可以利用pandas来完成,这篇随笔只是我在学习过程中的简单记录,其他的功能还需要继续去探索。

一、pandas的安装:

1.安装pandas其实是非常简单的,pandas依赖处理Excel的xlrd模块,所以我们需要提前安装这个,安装命令是:pip install xlrd

2.开始安装pandas,安装命令是:pip install pandas

二、读取excel文件

webservice_testcase.xlsx结构如下:

1523728-20190102155725312-436039785.png

1.首先我们应该先将这个模块导入

import pandas as pd

2.读取表单中的数据:

sheet=pd.read_excel('test_data\webservice_testcase.xlsx')#这个会直接默认读取到这个Excel的第一个表单

data=sheet.head()#默认读取前5行数据

print("获取到所有的值: {0}".format(data))#格式化输出

3.也可以通过指定表单名来读取数据

sheet=pd.read_excel('test_data\webservice_testcase.xlsx',sheet_name='userRegister')

data=sheet.head()#默认读取前5行数据

print("获取到所有的值: {0}".format(data))#格式化输出

4.通过表单索引来指定要访问的表单,0表示第一个表单,也可以采用表单名和索引的双重方式来定位表单,也可以同时定位多个表单,方式都罗列如下所示

sheet=pd.read_excel('test_data\webservice_testcase.xlsx',sheet_name=['sendMCode','userRegister'])#可以通过表单名同时指定多个#sheet=pd.read_excel('test_data\webservice_testcase.xlsx',sheet_name=0)#可以通过表单索引来指定读取的表单#sheet=pd.read_excel('test_data\webservice_testcase.xlsx',sheet_name=['sendMCode',1])#可以混合的方式来指定#sheet=pd.read_excel('test_data\webservice_testcase.xlsx',sheet_name=[1,2])#可以通过索引 同时指定多个

data=sheet.values#获取所有的数据,注意这里不能用head()方法

print("获取到所有的值: {0}".format(data))#格式化输出

二、操作Excel中的行列

1.读取制定的某一行数据:

sheet=pd.read_excel('webservice_testcase.xlsx')#这个会直接默认读取到这个Excel的第一个表单

data=sheet.ix[0].values#0表示第一行 这里读取数据并不包含表头

print("读取指定行的数据: {0}".format(data))

得到了如下结果:

1523728-20190102154546240-526632100.png

2.读取指定的多行:

sheet=pd.read_excel('test_data\webservice_testcase.xlsx')#这个会直接默认读取到这个Excel的第一个表单

data=sheet.ix[[0,1]].values#0表示第一行 这里读取数据并不包含表头

print("读取指定行的数据: {0}".format(data))

得到了如下的结果:

1523728-20190102154850410-1598177146.png

3.读取指定行列的数据:

sheet=pd.read_excel('test_data\webservice_testcase.xlsx')#这个会直接默认读取到这个Excel的第一个表单

data=sheet.ix[0,1]#读取第一行第二列的值

print("读取指定行的数据: {0}".format(data))

得到了如下结果:

1523728-20190102155349602-1325077576.png

4.读取指定的多行多列的值:

sheet=pd.read_excel('test_data\webservice_testcase.xlsx')

data=sheet.ix[[1,2],['method','description']].values#读取第二行第三行的method以及description列的值,这里需要嵌套列表

print("读取指定行的数据: {0}".format(data))

得到了如下的结果:

1523728-20190102155639606-790241049.png

5.读取所有行指定的列的值:

sheet=pd.read_excel('test_data\webservice_testcase.xlsx')

data=sheet.ix[:,['method','description']].values#读取第二行第三行的method以及description列的值,这里需要嵌套列表

print("读取指定行的数据: {0}".format(data))

得到了如下的结果:

1523728-20190102160016660-2009870505.png

6.获取行号输出:

sheet=pd.read_excel('test_data\webservice_testcase.xlsx')print("输出行号列表",sheet.index.values)

得到了如下的结果:

1523728-20190102160347182-229630028.png

7.获取列名输出:

sheet=pd.read_excel('test_data\webservice_testcase.xlsx')print("输出列标题",sheet.columns.values)

得到了如下的结果:

1523728-20190102160559563-1033248251.png

8.获取指定行数的值:

sheet=pd.read_excel('test_data\webservice_testcase.xlsx')print("输出值",sheet.sample(2).values)

9.获取指定列的值

sheet=pd.read_excel('test_data\webservice_testcase.xlsx')print("输出值",sheet['description'].values)

得到了如下的结果:

1523728-20190102161145636-2096473637.png

三、将excel中的每一条数据处理成字典,然后让如一个列表中

test_data=[]

sheet = pd.read_excel(self.file_name, sheet_name=key)for i in sheet.index.values:#获取行号的索引,并对其进行遍历:#根据i来获取每一行指定的数据 并利用to_dict转成字典  row_data=sheet.ix[i,['id','method','description','url','param','ExpectedResult']].to_dict()

test_data.append(row_data)

另外,我们可以把测试用例相关的东西写入一个配置文件当中,读取的时候可以根据配置文件中的内容来进行读取:

配置文件如下:

[CASECONFIG]

sheet_list={'sendMCode':'all',

'userRegister':'all',

'verifyUserAuth':'all',

'bindBankCard':[]

}

配置文件处理.py代码如下:

importconfigparserclassReadConfig:defread_config(self,file_path,section,option):

cf=configparser.ConfigParser()

cf.read(file_path,encoding="utf-8")

value=cf.get(section,option)return value

project_path.py代码如下:

importos

Project_path=os.path.split(os.path.split(os.path.realpath(__file__))[0])[0]#配置文件路径

case_config_path=os.path.join(Project_path,'config','case.config')#测试用例的路径

test_cases_path=os.path.join(Project_path,'test_data','webservice_testcase.xlsx')

然后我们把读取excel中的内容封装成一个类,代码示例如下:

from common importproject_pathfrom common.read_config importReadConfig as RCimportpandas as pdclassDoExcel:def __init__(self,file_name):

self.file_name=file_name

self.sheet_list=eval(RC().read_config(project_path.case_config_path,'CASECONFIG','sheet_list'))defdo_excel(self):

test_data=[]for key inself.sheet_list:if self.sheet_list[key] == 'all': #读取所有的用例

sheet = pd.read_excel(self.file_name, sheet_name=key)for i in sheet.index.values:#获取行号的索引,并对其进行遍历:

#根据i来获取每一行指定的数据 并利用to_dict转成字典

row_data=sheet.ix[i,['id','method','description','url','param','ExpectedResult']].to_dict()

test_data.append(row_data)else:

sheet= pd.read_excel(self.file_name, sheet_name=key)for i inself.sheet_list[key]:#根据list中的标号去读取excel指定的用例

row_data=sheet.ix[i-1,['id','method','description','url','param','ExpectedResult']].to_dict()

test_data.append(row_data)returntest_dataif __name__ == '__main__':

test_data=DoExcel(project_path.test_cases_path).do_excel()print(test_data)

如果将配置改成如下内容:

[CASECONFIG]

sheet_list={'sendMCode':[1,3,5],'userRegister':[],'verifyUserAuth':[],'bindBankCard':[]

}

我们将会得到如下的运行结果:

[{'id': 1, 'method': 'sendMCode', 'description': '正常流程', 'url': 'http://120.24.235.105:9010/sms-service-war-1.0/ws/smsFacade.ws?wsdl', 'param': '{"client_ip":"172.16.168.202","tmpl_id":1,"mobile":"${tel}"}', 'ExpectedResult': '(result){ retCode = "0" retInfo = "ok" }'},

{'id': 3, 'method': 'sendMCode', 'description': '手机号为空', 'url': 'http://120.24.235.105:9010/sms-service-war-1.0/ws/smsFacade.ws?wsdl', 'param': '{"client_ip":"172.16.168.202","tmpl_id":1,"mobile":""}', 'ExpectedResult': "Server raised fault: '手机号码错误'"},

{'id': 5, 'method': 'sendMCode', 'description': 'ip地址为空', 'url': 'http://120.24.235.105:9010/sms-service-war-1.0/ws/smsFacade.ws?wsdl', 'param': '{"client_ip":"","tmpl_id":1,"mobile":"${tel}"}', 'ExpectedResult': "Server raised fault: '用户IP不能为空'"}]

到此,将excel中的用例数据读取成为[{key1:value1},{key2:value2},...,{keyn:valuen}]这样的形式已经完毕,但是还有很多东西需要完善,比如用例中完成参数的替换,测试完成后回写测试数据到excel对应的表格中等等内容。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP