• Python读取Excel数据并根据列名取值


    一直想将自己接触到的东西梳理一遍,可就是迈不出第一步,希望从这篇总结开始不要再做行动的矮人了。

    最近测试过程中需要用到python读取excel用例数据,于是去了解和学习了下xlrd库,这里只记录使用过程中读取excel数据相关操作。

    一、安装xlrd库

      可以下载xlrd库包到本地安装,也可以通过pip命令安装,这里我选择pip命令:

      pip install xlrd

    二、使用xlrd读取excel数据

      具体详细的操作可以参考xlrd库操作说明文档,以下是两种读取excel数据的方法:

      1、根据Excel中sheet名称读取数据:    

     1 def readExcelDataByName(fileName, sheetName):
     2     table = None
     3     errorMsg = None
     4     try:
     5         data = xlrd.open_workbook(fileName)
     6         table = data.sheet_by_name(sheetName)
     7     except Exception, msg:
     8         errorMsg = msg  
    9 return table, errorMsg

      2、根据Excel中sheet的序号获取:

    1 def readExcelDataByIndex(fileName, sheetIndex):
    2     table = None
    3     errorMsg = ""
    4     try:
    5         data = xlrd.open_workbook(fileName)
    6         table = data.sheet_by_index(sheetIndex)
    7     except Exception, msg:
    8         errorMsg = msg
    9     return table, errorMsg

      3、根据列名获取相应序号,由于有时读取excel中列数据时,需要通过列头名称获取相应的列中的值,所以写了下面这个返回列名所在表格中的index。然后就可以直接通过table.cell_value(i, getColumnIndex(table,'列名'))获取列的值。

     1 def getColumnIndex(table, columnName):
     2     columnIndex = None 3     
     3     for i in range(table.ncols): 5        
     4         if(table.cell_value(0, i) == columnName):
     5             columnIndex = i
     6             break
     7     return columnIndex

      下面加入需要读取如下excel表格中的数据,在读取数据时直接根据列名去获取相应的值。

    根据列名读取相应的值,代码如下:

     1 #!/usr/bin/python
     2 # coding=utf-8
     3 __author__ = 'Paul'
     4 import xlrd
     5 import chardet
     6 import traceback
     7 def getColumnIndex(table, columnName):
     8     columnIndex = None
     9     #print table
    10     for i in range(table.ncols):
    11         #print columnName
    12         #print table.cell_value(0, i)
    13         if(table.cell_value(0, i) == columnName):
    14             columnIndex = i
    15             break
    16     return columnIndex
    17 def readExcelDataByName(fileName, sheetName):
    18     #print fileName
    19     table = None
    20     errorMsg = ""
    21     try:
    22         data = xlrd.open_workbook(fileName)
    23         table = data.sheet_by_name(sheetName)
    24     except Exception, msg:
    25         errorMsg = msg
    26     return table, errorMsg
    27 def readExcelDataByIndex(fileName, sheetIndex):
    28     table = None
    29     errorMsg = ""
    30     try:
    31         data = xlrd.open_workbook(fileName)
    32         table = data.sheet_by_index(sheetIndex)
    33     except Exception, msg:
    34         errorMsg = msg
    35     return table, errorMsg
    36 if __name__ == '__main__':
    37     #example
    38     xlsfile= 'F:/test_AutoTesting/TestCase/RunList.xlsx'
    39     table = readExcelDataByName(xlsfile, 'Sheet1')[0]
    40     #获取第一行的值    
    41     testcase_id = table.cell_value(1, getColumnIndex(table,'TestCaseID'))
    42     app_config = table.cell_value(1, getColumnIndex(table,'APPConfig'))
    43 
    44     print u'测试用例ID为:%s'%(testcase_id)
    45     print u'配置信息为:%s'%(app_config)

    得出结果如下:

      4、读取excel中的文本或数值转换成了float的问题

        有时Excel中的值为20,但读取出来的值却变成了20.0,这与我们想要的不大一致,特别是做UI自动化测试过程中需要下拉选择值时就完全选不出想要的选项了。目前我想到的是通过下面的语句来处理:

    if isinstance(inputValue,float):    #判断读取到的值是否为float
        if inputValue==int(inputValue): #判断读取到的值与转成int后的值是否相等,如果相等则转成int
        inputValue = int(inputValue)
        inputValue = str(inputValue) #转成str
  • 相关阅读:
    智课雅思词汇---二十、前缀syn-sym-syl是什么意思
    运行php的时候出现计算机中丢失 MSVCR110.dll怎么解决
    解决PHP5.6版本“No input file specified”的问题
    PhpSpreadsheet如何读取excel文件
    [thinkphp使用phpspreadsheet时出现]Cannot redeclare xxxxxx() (previously declared in C:WWWxxx.xxx:xxx)
    thinkphp中如何使用phpspreadsheet插件
    thinkphp中composer方式安装的插件如何使用
    phpexcel如何读取excel的数据和如何导出数据到excel
    Composer如何安装(安装注意事项)
    enq: TX
  • 原文地址:https://www.cnblogs.com/binghaixuefeng/p/5491405.html
Copyright © 2020-2023  润新知