码迷,mamicode.com
首页 > 编程语言 > 详细

Python3 操作Excel

时间:2017-12-11 00:58:41      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:计算   pytho   .json   method   png   pass   文件   war   需要   

首先说明一下

在处理大文件时,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

import xlrd
import os
from openpyxl.reader.excel import load_workbook

from Wm_Api import readConfig as RC

Rc = RC.ReadConfig()

class Excel(object):
    ‘‘‘定义一个excel类‘‘‘

    def __init__(self):
        初始化基本信息

        self.path = Rc.path
        self.excelPath = os.path.join(self.path,caseData)

    def readExcel(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
        return self.caseList







if __name__ == __main__:

    excel = Excel()
    excel.readExcel(ApiInfo.xlsx,Login)

 

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

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

raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 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的用法

原文地址:https://www.cnblogs.com/liu-shuai/p/6098246.html

eval

  功能:将字符串str当成有效的表达式来求值并返回计算结果。

  语法: eval(source[, globals[, locals]]) -> value

  参数:

    source:一个Python表达式或函数compile()返回的代码对象

    globals:可选。必须是dictionary

    locals:可选。任意map对象

  实例展示:

可以把list,tuple,dict和string相互转化。
#################################################
字符串转换成列表
>>>a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
>>>type(a)
<type str>
>>> b = eval(a)
>>> print b
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
>>> type(b)
<type list>
#################################################
字符串转换成字典
>>> a = "{1: ‘a‘, 2: ‘b‘}"
>>> type(a)
<type str>
>>> b = eval(a)
>>> print b
{1: a, 2: b}
>>> type(b)
<type dict>
#################################################
字符串转换成元组
>>> a = "([1,2], [3,4], [5,6], [7,8], (9,0))"
>>> type(a)
<type str>
>>> b = eval(a)
>>> print b
([1, 2], [3, 4], [5, 6], [7, 8], (9, 0))
>>> type(b)
<type tuple>

 

Python3 操作Excel

标签:计算   pytho   .json   method   png   pass   文件   war   需要   

原文地址:http://www.cnblogs.com/BlueSkyyj/p/8018511.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!