• selenium实现excel文件数据的读、写


    在进行软件测试或设计自动化测试框架时,一个不可避免的过程就是: 参数 化,在利用 python 进行自动化测试开发时,通常会使用 excel 来做数据管 理,利用 xlrd、xlwt 开源包来读写 excel。

    一、环境安装

    1.安装xlrd

    pip install xlrd

    2.安装xlwt

    pip install xlwt

    二、读取excel文件数据示例

    让我们先看一个简单的 excel 读写示例,从表 1 中读取数据:

    #-*- coding:utf-8  -*-
    import xlrd
    import xlwt
    
    
    if __name__=="__main__":
        #excel文件全路径
        excelpath = r'F:pycharm-workspaceselenium	est.xlsx'
        #用于读取excel文件
        tableopen = xlrd.open_workbook(excelpath)
        #获取excel工作簿数
        count = len(tableopen.sheets())
        print u"工作簿数为%s"%count
        #获取表数据的行、列数
        table = tableopen.sheet_by_name('Sheet1')
        h = table.nrows
        l = table.ncols
        print u"表数据的行数为%s,列数为%s"%(h,l)
        # 循环读取数据
        for i in range(0,h):
            rowValues = table.row_values(i) #按行读取数据
            # 输出读取的数据
            for data in rowValues:
                print data,'   ',
            print ''
    • 执行结果:

    三、写入excel文件数据示例

    注意这里的 excel 文件的后缀是 xls 如果是 xlsx 打开是会提示无效

    # 注意这里的 excel 文件的后缀是 xls 如果是 xlsx 打开是会提示无效
        excelpath = r'F:pycharm-workspaceselenium	est2.xls'
        wtbook = xlwt.Workbook()
        #新增一个sheet工作表
        sheet = wtbook.add_sheet('Sheet1',cell_overwrite_ok=True)
        #写入数据头
        headlist = [u'学号',u'姓名',u'班级']
        row = 0
        col = 0
        #循环写
        for head in headlist:
            sheet.write(row,col,head)
            col = col+1
        for i in xrange(1,5):#行数限制,我这里写入4行数据
            for j in xrange(1,3):#列数限制,因为我的headlist有三个数据,所以这里肯定是3列
                #写入4行0~99的随机数
                data = random.randint(0,99)
                sheet.write(i,0,i)
                sheet.write(i,j, data)
            print u"写第[%d]行数据"%(i)
        #保存
        wtbook.save(excelpath)
    • 执行结果:

      open()用法

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      # encoding:utf-8
       
      try:
          # 写模式打开文件,若不存在该文件,则创建
          out = open("data.out""w")
          # 默认为读模式,等价于out = open("data.out", "r")
          # out = open("data.out")
          # 追加+写模式
          # out = open("data.out", "a+")
       
          # 标准输出(通常是屏幕),使用file参数将数据写入到指定的文件
          print("blues stun easily"file=out)
       
      # 出现异常的类型很多,我们需要了解具体的异常信息,可以使用as err,将异常打印出来
      except IOError as err:
          # 将err对象转换成字符串类型
          print("file error:" + str(err))
       
      # 无论try中的语句执行是否出问题,都会执行finally中的代码
      finally:
          # 如果某些异常情况导致文件不存在,则会引发异常,所以想判断文件是否存在,存在则关闭文件
          if 'data' in locals():
              # 记得一定要关闭
              out.close()

    关于Selenium 如何读取Txt、Excel、Csv..等文件以及如何获得我们想要的格式数据

    一 、读取TXT文档

    Txt算是比较简单的文档了,不多说直接上代码:

    1.单独的关键字,直接读取

    这里写图片描述

    1
    2
    3
    4
    5
    6
    #coding utf-8
    file_info = open('Testing.txt', 'r')
    values = file_info.readlines()
    file_info.close()
    for item in values:
        print item

    结果:

    这里写图片描述

    2.两列关键字,以‘,’逗号分隔

    这里写图片描述

    代码部分:

    1
    2
    3
    4
    5
    6
    7
    file_info = open('Testing.txt', 'r')
    values = file_info.readlines()
    file_info.close()
    for item in values:
        data1 = item.split(',')[0]#第一列
        data2 = item.split(',')[1]#第二列
        print data1, data2

    结果如下:

    这里写图片描述

    Txt格式的是比较简单的,但是如果有多组数据呢?用spilt拆分就没那么方便了,因为以split方法一次只能将字符串拆分为两段,那么针对多组数据就要用到csv和excel啦。

    二、读取csv文档

    注意csv文档的建立最好是在excel中另存为——>选择csv格式,而不是直接改后缀。

    读取csv文档我们需要引入csv库,即import csv

    先看一下我们需要读取的文档:

    这里写图片描述

    OK,接下来我们要访问这些数据:

    1
    2
    3
    4
    5
    6
    import csv #访问csv文件需要csv库的支持(本身自带),直接导入即可
    my_file = 'Testing.csv' #文件名
    values = csv.reader(open(my_file, 'rb'))
    for item in values:
        print item #整行读
        print item[0], item[1], item[2] #一个数据一个数据的读

    使用item[Index]可以访问具体的那个数据,结果如下:

    这里写图片描述

    看起来不错,很能满足我们的需求,可以方便的读取多行多列数据,而且针对单个的数据访问也十分方便。但是,But…有些人可能试过,csv是不支持中文的,自己写进中文进去打开就有可能是一堆编码,那么Excel就登场了~

    三、读取Excel文件

    笔者个人觉得Excel是比较完美的,改进了CSV不支持中文的情况,好的,看一下我们的例子:

    这里写图片描述

    在Selenium使用Excel读取数据的话我们是需要下载Excel库文件的,即xlrd文件,下载链接:https://pypi.python.org/pypi/xlrd

    下载完成解压,在当前目录cmd,输入python setup.py install即可安装成功,也可以直接cmd,输入pip命令:pip install xlrd

    安装完成后,直接导入xlrd即可使用相关操作Excel的方法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    import xlrd
    my_file = xlrd.open_workbook('Testing.xls')#得到文件
    table = my_file.sheets()[0]#得到sheet页
    nrows = table.nrows #总行数
    ncols = table.ncols #总列数
    i = 0
    while i < nrows:
        print table.row_values(i)[0], table.row_values(i)[1]
        i = i+1

    结果:

    这里写图片描述

    OK,Excel能够解决中文的问题,但是此处需要注意,不能直接读取整行的数据,只能将数据分开一个一个的读取,例如以上代码换成下面这样:

    1
    2
    3
    while i < nrows:
        print table.row_values(i) #读取整行
        i = i+1

    结果就会出现编码问题:这里写图片描述

    可能大家还注意到了,这里第二列的数字1990,在Selenium就变成了浮点型数字1999.0,之前看过一个解决办法是在Excel文档中,选中单元格,右键单元格格式——>文本.但是笔者发现这样并不能解决问题,至于数字目前笔者的解决办法是代码判断,如果是纯数字就转化为int型。

    1
    2
    3
    4
    5
    6
    7
    while i < nrows:
        cell = table.row_values(i)[1] #得到数字列数据
        ctype = table.cell(i, 1).ctype #得到数字列数据的格式
        if ctype == 2 and cell % 1 == 0: #判断是否是纯数字
            cell = int(cell) #是纯数字就转化位int类型
        print table.row_values(i)[0], cell
        i = i+1

    接下来我们再看结果:

    这里写图片描述

    OK,这下圆满啦。

    *注意:

    1.csv或者excel格式的文件在最初设置数据的时候都要右键——>单元格格式——>文本

    2.excel文件的格式必须是后缀名为*.xls

    3.excel文档的ctype 分为5种,对应分别是:

    empty: 0

    string: 1

    number:2

    date: 3

    boolean :4

    error:5

  • 相关阅读:
    redis持久化的几种方式
    Spring Cloud基础教程
    微服务实践三: 服务编排
    分库分表的几种常见玩法及如何解决跨库查询等问题
    Spring Cloud微服务开发笔记5——Ribbon负载均衡策略规则定制
    第1章 Python基础-Python介绍&循环语句 练习题&作业
    MySQL中 optimize table '表名'的作用
    Python3 命令行参数
    Python enumerate() 函数
    Python rpartition() 方法
  • 原文地址:https://www.cnblogs.com/klb561/p/9332908.html
Copyright © 2020-2023  润新知