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-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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM