1. 程式人生 > >selenium實現excel文件數據的讀、寫

selenium實現excel文件數據的讀、寫

可能 locals 安裝完成 行數據 spa 轉換成 toolbar csv文件 ip命令

在進行軟件測試或設計自動化測試框架時,一個不可避免的過程就是: 參數 化,在利用 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-workspace\selenium\test.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-workspace\selenium\test2.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

selenium實現excel文件數據的讀、寫