Bootstrap

python3.7操作excel的_Python3 操作Excel

首先说明一下

在处理大文件时,openpyxl 的性能不如 xlrd,xlwt等。所以可以读取的时候使用xlrd,写的时候用openpyxl。

今天遇到一个使用场景:excel存放的是一条条用例,包含表头,需要将这些用例读取出来。单元格存放的有字典等类型。

实现见代码:

大体思路是,先获取表头作为列表1:list1。

然后再将后续各行数据获取:listn,使用dict(zip(list1,listn),组合成字典。

最后将字典存为List。

#FileName : Excel.py#Author : Adil#DateTime : 2017/12/10 13:08#SoftWare : PyCharm

importxlrdimportosfrom openpyxl.reader.excel importload_workbookfrom Wm_Api importreadConfig as RC

Rc=RC.ReadConfig()classExcel(object):'''定义一个excel类'''

def __init__(self):'初始化基本信息'self.path=Rc.path

self.excelPath= os.path.join(self.path,'caseData')defreadExcel(self,excelName,SheetName):'读取excel'self.excelName=os.path.join(self.excelPath,excelName)

self.Rb=xlrd.open_workbook(self.excelName)

self.Rs=self.Rb.sheet_by_name(SheetName)#获取行数

rows =self.Rs.nrows#定义一个dict存放单条用例

#self.titleDict = dict.fromkeys(self.Rs.row_values(0))

#取第一行的表头存为list。

self.titleList =self.Rs.row_values(0)#定义一个list 存放 所有用例

self.caseList =[]for r in range(1,rows):

rowValues=self.Rs.row_values(r)#print(r)

#print(self.Rs.row_values(r))

#self.caseInfo = dict.fromkeys(self.Rs.row_values(0),self.Rs.row_values(r))

#print(self.caseInfo)

#将列表组合成 字典 这是 将列表转换为字典的一个方法。

self.caseDict =dict(zip(self.titleList,rowValues))#下面是将字典转换为列表,

#print(list(self.caseDict))

#print(self.caseDict.values())

#print(self.caseDict)

#将字典再拼接为列表。

self.caseList.append(self.caseDict)#print(self.caseList)

#返回caseList

returnself.caseListif __name__ == '__main__':

excel=Excel()

excel.readExcel('ApiInfo.xlsx','Login')

注意:这样读取的数据类型都是str。包括表中的字典。读取也是str.

如果直接拿这个字典来用的话,会报错,如下:

raise JSONDecodeError("Expecting value", s, err.value) fromNone

json.decoder.JSONDecodeError: Expecting value: line1 column 1 (char 0)

处理方法如下:

这里使用了特殊的函数 eval()

caseData = caseDict['CaseData']

caseRun= caseDict['CaseRun']print(url1)if caseRun == 'Y':if method == 'Post':print(caseDict['CaseName'])print(caseData)print(type(caseData))

caseData=eval(caseData)print(type(caseData))#下面是上面三条打印的结果,看似一样,但是类型不一样。所以需要转为dict

#{'username': 'xzyc001', 'password': '111111'}

#< class 'str'>

#

#< class 'dict'>

下面插播一条eval的用法

;