【Python】如何处理Excel中的数据
我们平时在做自动化测试的时候,可能会涉及到从表格中去读取或者存储数据,我们除了可以使用openpyxl来操作excel,当然也可以利用pandas来完成,这篇随笔只是我在学习过程中的简单记录,其他的功能还需要继续去探索。
一、pandas的安装:
1.安装pandas其实是非常简单的,pandas依赖处理Excel的xlrd模块,所以我们需要提前安装这个,安装命令是:pip install xlrd
2.开始安装pandas,安装命令是:pip install pandas
二、读取excel文件
webservice_testcase.xlsx结构如下:
1.首先我们应该先将这个模块导入
import pandas as pd
2.读取表单中的数据:
sheet=pd.read_excel('test_data\\webservice_testcase.xlsx')#这个会直接默认读取到这个Excel的第一个表单
data=sheet.head()#默认读取前5行数据
print("获取到所有的值:\n{0}".format(data))#格式化输出
3.也可以通过指定表单名来读取数据
sheet=pd.read_excel('test_data\\webservice_testcase.xlsx',sheet_name='userRegister')
data=sheet.head()#默认读取前5行数据
print("获取到所有的值:\n{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("获取到所有的值:\n{0}".format(data))#格式化输出
二、操作Excel中的行列
1.读取制定的某一行数据:
sheet=pd.read_excel('webservice_testcase.xlsx')#这个会直接默认读取到这个Excel的第一个表单
data=sheet.ix[0].values#0表示第一行 这里读取数据并不包含表头
print("读取指定行的数据:\n{0}".format(data))
得到了如下结果:
2.读取指定的多行:
sheet=pd.read_excel('test_data\\webservice_testcase.xlsx')#这个会直接默认读取到这个Excel的第一个表单
data=sheet.ix[[0,1]].values#0表示第一行 这里读取数据并不包含表头
print("读取指定行的数据:\n{0}".format(data))
得到了如下的结果:
3.读取指定行列的数据:
sheet=pd.read_excel('test_data\\webservice_testcase.xlsx')#这个会直接默认读取到这个Excel的第一个表单
data=sheet.ix[0,1]#读取第一行第二列的值
print("读取指定行的数据:\n{0}".format(data))
得到了如下结果:
4.读取指定的多行多列的值:
sheet=pd.read_excel('test_data\\webservice_testcase.xlsx')
data=sheet.ix[[1,2],['method','description']].values#读取第二行第三行的method以及description列的值,这里需要嵌套列表
print("读取指定行的数据:\n{0}".format(data))
得到了如下的结果:
5.读取所有行指定的列的值:
sheet=pd.read_excel('test_data\\webservice_testcase.xlsx')
data=sheet.ix[:,['method','description']].values#读取第二行第三行的method以及description列的值,这里需要嵌套列表
print("读取指定行的数据:\n{0}".format(data))
得到了如下的结果:
6.获取行号输出:
sheet=pd.read_excel('test_data\\webservice_testcase.xlsx')
print("输出行号列表",sheet.index.values)
得到了如下的结果:
7.获取列名输出:
sheet=pd.read_excel('test_data\\webservice_testcase.xlsx')
print("输出列标题",sheet.columns.values)
得到了如下的结果:
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)
得到了如下的结果:
三、将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代码如下:
import configparser
class ReadConfig:
def read_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代码如下:
import os
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 import project_pathfrom common.read_config import ReadConfig as RC
import pandas as pd class DoExcel:
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'))
def do_excel(self):
test_data=[]
for key in self.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 in self.sheet_list[key]:#根据list中的标号去读取excel指定的用例
row_data=sheet.ix[i-1,['id','method','description','url','param','ExpectedResult']].to_dict()
test_data.append(row_data)
return test_data
if __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){\n retCode = "0"\n retInfo = "ok"\n }'},
{'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对应的表格中等等内容。
【Python】如何处理Excel中的数据的更多相关文章
- 使用Python将Excel中的数据导入到MySQL
使用Python将Excel中的数据导入到MySQL 工具 Python 2.7 xlrd MySQLdb 安装 Python 对于不同的系统安装方式不同,Windows平台有exe安装包,Ubunt ...
- Python向excel中写入数据的方法 方法简单
最近做了一项工作需要把处理的数据写入到Excel表格中进行保存,所以在此就简单介绍使用Python如何把数据保存到excel表格中. 数据导入之前需要安装 xlwt依赖包,安装的方法就很简单,直接 p ...
- Python读取Excel中的数据并导入到MySQL
""" 功能:将Excel数据导入到MySQL数据库 """ import xlrd import MySQLdb # Open the w ...
- python读取excel中的数据
import numpy as np import matplotlib.pyplot as plt import pandas as pd #df = pd.read_excel('/Users/N ...
- python 去除Excel中的重复行数据
导入pandas import pandas as pd 1.读取excel中的数据: frame = pd.DataFrame(pd.read_csv('excel的绝对路径.csv'', 'She ...
- 用python在excel中读取与生成随机数写入excel中
今天是我第一次发博客,就关于python在excel中的应用作为我的第一篇吧. 具体要求是:在一份已知的excel表格中读取学生的学号与姓名,再将这些数据放到新的excel表中的第一列与第二列,最后再 ...
- NOPI读取模板导出(Excel中追加数据)
在Controller里,我们定义一个FileResult的Action,返回值是一个文件形式被浏览器下载下来. [HttpGet] public FileResult ExportProductLi ...
- Java利用POI导入导出Excel中的数据
首先谈一下今天发生的一件开心的事,本着一颗android的心我被分配到了PB组,身在曹营心在汉啊!好吧,今天要记录和分享的是Java利用POI导入导出Excel中的数据.下面POI包的下载地 ...
- 使用OpenXml把Excel中的数据导出到DataSet中
public class OpenXmlHelper { /// <summary> /// 读取Excel数据到DataSet中,默认读取所有Sheet中的数据 /// </sum ...
随机推荐
- Docker学习一篇就够了
Docker 1.简介 Docker是一个开源的应用容器引擎:是一个轻量级容器技术: Docker支持将软件编译成一个镜像:然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像 ...
- pycharm运行RF脚本时的环境搭建与配置
1.安装pycharm:2.file->setting,下载插件intellibot,重启pycharm:3.配置识别RF类型文件,filefile->editor->file ty ...
- HCTF2018-admin[条件竞争]
附上网上师傅的wp 学习链接: https://www.jianshu.com/p/f92311564ad0 按照师傅的wp复现一下: 源代码审计,去看路由里的login函数和change函数都在没 ...
- vue学习指南:第十二篇(详细) - Vue的 路由 第二篇 ( 路由按需加载(懒加载))
各位朋友 因 最近工作繁忙,小编停更了一段时间,快过年了,小编祝愿 大家 事业有成 学业有成 快乐健康 2020开心过好每一天.从今天开始 我会抽时间把 Vue 的知识点补充完整,以及后期会带给大家更 ...
- CQYZOJ P1392 拔河问题
题目\(1\) Description 一个学校举行拔河比赛,所有的人被分成了两组,每个人必须(且只能够)在其中的一组,且两个组内的所有人体重加起来尽可能地接近. Input 第\(1\)行是一个\( ...
- Python七夕记
- 如何在linux主机上运行/调试 arm/mips架构的binary
如何在linux主机上运行/调试 arm/mips架构的binary 原文链接M4x@10.0.0.55 本文中用于展示的binary分别来自Jarvis OJ上pwn的add,typo两道题 写这篇 ...
- 这是一篇通过open live writer发布的博文
这两天零零总总的尝试了两三款写博客的软件,总感觉不怎么上手,最后还是使用博客园官方推荐的工具写博吧,简单方便,目前的功能基本都有,尤其是粘贴图片特别方便,回想之前的几篇博文,真是一种煎熬哈哈(对于我这 ...
- IntelliJ IDEA如何导入jar包
转自:https://jingyan.baidu.com/article/0f5fb0993e9e1f6d8334ead2.html 通过这种方式导入jar包,idea就能百分百识别到,如果是那种直接 ...
- ansible笔记(7):常用模块之包管理模块
1.yum_repository模块 用于远程管理远程主机上的yum仓库. 参数解析: name:必须参数,用于指定要操作的唯一的仓库ID,也就是.repo配置文件中每个仓库对应的“中括号”内的仓库I ...