zoukankan      html  css  js  c++  java
  • Python unittest excel数据驱动 写入

    之前写过一篇关于获取excel数据进行迭代的方法,今天补充上写入的方法。由于我用的是Python3,不兼容xlutils,所以无法使用copy excel的方式来写入。这里使用xlwt3创建excel后,将原有的excel数据输入到新建的excel,写入->保存->移除原有excel。

    1.首先安装xlwt3,下载链接:https://pypi.python.org/pypi/xlwt3/0.1.2

    import os
    import xlrd
    import xlwt3
    
    class ExcelUtil(object):
    
        def __init__(self, excelPath, sheetName):
            self.path = excelPath
            self.name = sheetName
    
            self.data = None
            self.table = None
            self.row = None
            self.rowNum = None
            self.colNum = None
            self.curRowNo = 1
    
        def openExcel(self):
            self.data = xlrd.open_workbook(self.path, formatting_info=True)
            self.table = self.data.sheet_by_name(self.name)
            self.row = self.table.row_values(0)
            self.rowNum = self.table.nrows
            self.colNum = self.table.ncols
    
        def next(self):
            self.openExcel()
            r = []
            try:
                while self.hasNext():
                    s = {}
                    col = self.table.row_values(self.curRowNo)
                    i = self.colNum
                    for x in range(i):
                        s[self.row[x]] = col[x]
                    r.append(s)
                    self.curRowNo += 1
                self.curRowNo = 1
            except Exception as ex:
                print(ex)
            return r
    
        def hasNext(self):
            if self.rowNum != 0 and self.rowNum > self.curRowNo :
                return True
            else:
                return False
    
        def write(self, titleName, value):
            self.openExcel()
    
            columnNum = self.getColNum(titleName)
    
            book = xlwt3.Workbook(encoding='utf-8', style_compression=0)
            #cell_overwrite_ok=True参数是为了可以修改原来的cell
            sheet = book.add_sheet(self.name, cell_overwrite_ok=True)
    
            #将原来的excel数据添加到新建的excel中
            for x in range(self.rowNum):
                row = self.table.row_values(x)
                for i in range(self.colNum):  
                    sheet.write(x, i, row[i])
    
            #写入当前迭代那一行的excel
            if self.hasNext():
                sheet.write(self.curRowNo, columnNum, value)
                self.curRowNo += 1
    
            os.remove(self.path)
            book.save(self.path)
    
        def getColNum(self, titleName):
            titleColNum = -1
    
            try:
                for i in range(len(self.row)):
                    if self.row[i] == titleName:
                        titleColNum = i
                        break
                    else:
                        continue
            except Exception as ex:
                print(ex)
    
            return titleColNum

    3.这里执行xlwt3的write方法时,会提示:ValueError: ‘init’ in slots conflicts with class variable。
    打开Python35Libsite-packagesxlwt3formula.py文件,将其中的
    slots = [“init“, “__s”, “__parser”, “__sheet_refs”, “__xcall_refs”]
    修改为
    slots = [ “__s”, “__parser”, “__sheet_refs”, “__xcall_refs”]
    这时再执行就OK了!

  • 相关阅读:
    git stash 一个场景 mark
    sendBeacon 使用
    【踩坑笔记】layui之单选和复选框不显示
    wordpress后台管理超时没反应:load-scripts.php载入缓慢出错
    MySQL_Sql_打怪升级_进阶篇_测试: SQL随机生成测试数据
    MySQL_Sql_打怪升级_进阶篇_测试: 游标应用
    MySQL8.0新特性_01_JSON数据格式的支持
    MySQL_Sql_打怪升级_进阶篇_进阶19: 函数
    MySQL_Sql_打怪升级_进阶篇_进阶18: 存储过程
    MySQL_Sql_打怪升级_进阶篇_进阶17: 变量
  • 原文地址:https://www.cnblogs.com/hanzhao1987/p/5961304.html
Copyright © 2011-2022 走看看