中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Python中利用接口自動化對excel文件進行讀寫

發布時間:2021-01-16 09:27:43 來源:億速云 閱讀:438 作者:Leah 欄目:開發技術

本篇文章為大家展示了怎么在Python中利用接口自動化對excel文件進行讀寫,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

一、xlrd、xlwt以及xlutils安裝

1.使用pip安裝

pip install xlrd
pip install xlwt
pip install xlutils

2.在PyCharm中安裝

直接檢索需要安裝的模塊名稱即可,如xlrd:

怎么在Python中利用接口自動化對excel文件進行讀寫

二、xlrd操作excel文件的數據讀取

新建一個excel文件,文件名稱:excel_test.xlsx,文件編輯有兩個sheet表,內容如下:

sheet1:

怎么在Python中利用接口自動化對excel文件進行讀寫

sheet2:

怎么在Python中利用接口自動化對excel文件進行讀寫

(1)打開excel文件,獲取excel的sheet名

編輯如下代碼:

import xlrd
file = xlrd.open_workbook("excel_test.xlsx")
all_sheet = file.sheet_names() # 獲取所有的工作簿名
sheet_name1 = file.sheet_names()[0] # 通過sheet下標獲取,第一個sheet下標為0
sheet_name2 = file.sheet_by_index(0).name # 通過sheet索引獲取sheet名
print(all_sheet)
print(sheet_name1)
print(sheet_name2)
-----------------------------------------
# 返回結果
['員工信息表', 'api測試用例']
員工信息表
員工信息表

(2)獲取sheet工作表頁的對象

代碼示例:

import xlrd
file = xlrd.open_workbook("excel_test.xlsx")
sheet_name1 = file.sheet_names()[0]
sheet1_obj = file.sheet_by_name(sheet_name1) # 通過sheet名獲取sheet對象
sheet2_obj = file.sheet_by_index(1) # 通過sheet索引獲取sheet對象
print(sheet1_obj)
print(sheet2_obj)
------------------------------------
# 返回結果
<xlrd.sheet.Sheet object at 0x0000000002AA09B0>
<xlrd.sheet.Sheet object at 0x0000000002AA0978>

(3)獲取sheet工作表的行、列數,整行、整列數據,具體的單元格數據

代碼示例:

import xlrd
file = xlrd.open_workbook("excel_test.xlsx")
sheet = file.sheet_by_index(0) # 通過sheet索引獲取sheet對象
nrows = sheet.nrows # 獲取行數
ncols = sheet.ncols # 獲取列數
nrows_data = sheet.row_values(1) # 獲取第二行數據,返回的是列表
ncols_data = sheet.col_values(0) # 獲取第一列數據,返回的是列表
cell = sheet.cell(1,2)  # 獲取單元格數據,如第二行,第三列數據
print(nrows)
print(ncols)
print(nrows_data)
print(ncols_data)
print(cell)
-------------------------------
# 返回結果
6
5
['王五', '男', 32883.0, 'java開發工程師', 233.0]
['姓名', '王五', '李四', '張三', '小紅', '小明']
xldate:32883.0 # 這里日期數據直接返回成浮點數了

 常見讀取excel不同數據類型的返回問題,如讀取日期格式的數據

一般使用sheet.cell(rowx,colx)方法獲取單元格數據,單元格數據類型判斷可以使用如下代碼:

print(sheet.cell(1,2).ctype)
------------
# 返回日期數據的結果
3

注:ctype : 0 empty,1 string, 2 number,3 date, 4 boolean, 5 error

讀取單元格日期數據為浮點數的處理方式:

代碼如下:

import xlrd
from datetime import date
file = xlrd.open_workbook("excel_test.xlsx")
sheet = file.sheet_by_index(0) # 通過sheet索引獲取sheet對象
nrows_data = sheet.row_values(1) # 獲取第二行數據,返回的是列表
ncols_data = sheet.col_values(0) # 獲取第一列數據,返回的是列表
cell = sheet.cell(1,2)  # 獲取單元格數據,如第二行,第三列數據,返回的是浮點數
data_value = xlrd.xldate_as_tuple(sheet.cell_value(1,2) ,file.datemode) # xldate_as_tuple()方法得到日期數據年月日時分秒的值并返回為元組
datatime2 = date(*data_value[:3]).strftime('%Y/%m/%d') # 截取元組中的前三位,即年月日的值傳給data,并進行時間格式化
 
print(cell)
print(data_value)
print(datatime2)
 
-----------------------
# 返回結果
xldate:32883.0
(1990, 1, 10, 0, 0, 0)
1990/01/10

因此在讀取excel單元格數據,如遇到是日期格式的數據,可以加上如下代碼判斷并處理:

if (sheet.cell(row,col).ctype == 3):
 date_value = xlrd.xldate_as_tuple(sheet.cell_value(row,col),file.datemode)
 date_tmp = date(*date_value[:3]).strftime('%Y/%m/%d')

三、xlwt向excel文件寫入數據

xlwt一般用于向excel文件寫入數據,簡單示例如下:

import xlwt
 
workbook = xlwt.Workbook(encoding = 'utf-8') # 創建工作簿
sheet = workbook.add_sheet('api_test') # 添加一個sheet
data = sheet.write(0,0,'test')  # 向第一行第一列寫入數據:test
workbook.save('book.xlsx')   # 保存到book.xlsx中

 運行完成后會在該py文件的同級目錄下生成一個book.xlsx的excel文件,并新增了api_test的sheet表名,第一行第一列寫入數據:test

 向excel寫入數據時,可以設置單元格長寬、單元格合并、寫入時間格式數據以及添加超鏈接等

代碼示例:

import xlwt
import datetime
workbook = xlwt.Workbook(encoding = 'utf-8') # 創建工作簿
sheet = workbook.add_sheet('api_test') # 添加一個sheet
data = sheet.write(4,0,'test')
 
sheet.col(0).width = 5000   # 設置單元格寬度
 
style = xlwt.XFStyle()    # 初始化表格樣式
style.num_format_str = 'M/D/YY'  # 設置時間格式,如:M/D/YY
sheet.write(5, 1, datetime.datetime.now(), style) # 寫入時間格式數據
 
# 合并多列和和并多行
# 表示合并的行數是:按行索引,從0行到第0行,按列索引從0列到第3列,合并后并寫入數據:test1
sheet.write_merge(0, 0, 0, 3, 'test1')
# 表示合并的行數是:按行索引,從1行到第2行,按列索引從0列到第3列,合并后并寫入數據:test2
sheet.write_merge(1, 2, 0, 3, 'test2')
 
# 向單元格添加超鏈接
sheet.write(6, 0, xlwt.Formula('HYPERLINK("https://www.baidu.com/";"baidu")'))
 
workbook.save('book.xlsx')   # 保存到book.xlsx中

 運行后輸出excel效果如下:

怎么在Python中利用接口自動化對excel文件進行讀寫

四、xlutils操作excel文件

(1)拷貝excel表格

xlutils模塊下的copy可以復制拷貝excel文件,代碼示例:

import xlrd
from xlutils.copy import copy
excel_file = xlrd.open_workbook("book.xlsx")
new_file = copy(excel_file) # 拷貝文件對象
new_file.save("book1.xlsx") # 保存為excel文件

 運行以上代碼會在同級目錄下生成一個book1.xlsx的excel文件,該文件和book.xlsx一樣,只是文件名稱不一樣而已,也就是復制excel文件了

(2)修改excel文件內容

除了copy為其他excel文件外,也可以直接copy文件修改后,保存為同名的文件,那修改的內容將直接覆蓋原excel文件,達到修改的目的

示例:

import xlrd
from xlutils.copy import copy
excel_file = xlrd.open_workbook("book.xlsx")
new_file = copy(excel_file)
sheet = new_file.get_sheet(0) # 獲取表格的第一個sheet
sheet.write(0,1,"測試") # 第一行第二列寫入:測試
sheet.write(1,1,"測試1") # 第二行第二列寫入:測試1
new_file.save("book.xlsx")

 運行后book.xlsx表會修改更新

五、封裝操作excel讀和寫的類

通過上面介紹,基本具備使用xlrd、xlwt、xlutils模塊進行excel文件數據讀取和向excel文件中寫入數據,在進行接口測試時,我們說到需要:測試數據和測試腳本分離,后續的接口測試用例數據,我們統一寫入excel表格中,然后通過操作excel來讀取測試數據并將測試結果回填到excel中。因此,咱們需要對向excel讀取數據和向excel寫入數據的操作進行封裝。

我們操作上面的api測試用例這個sheet,封裝讀取excel數據的類,代碼示例:

from xlrd import open_workbook
class Readexcel():
 
 def excel_data_list(self, filename, sheetname):
 '''
 :param filename: excel文件名稱
 :param sheetname: excel中表格sheet名稱
 :return: data_list
 '''
 data_list = []
 wb = open_workbook(filename) # 打開excel
 sh = wb.sheet_by_name(sheetname) # 定位工作表
 header = sh.row_values(0) # 獲取標題行的數據
 for i in range(1, sh.nrows): # 跳過標題行,從第二行開始獲取數據
  col_datas = dict(zip(header, sh.row_values(i))) # 將每一行的數據,組裝成字典
  data_list.append(col_datas) # 將字典添加到列表中 ,列表嵌套字典,每個元素就是一個字典
 return data_list
 
if __name__ == '__main__':
 Readexcel()

 上面代碼封裝了讀取excel數據的類,將每一行數據讀取出來組裝成字典并添加到列表中

實例化運行:

 data_list = Readexcel().excel_data_list('excel_test.xlsx','api測試用例')
 print(data_list)
-----------------------
# 返回結果
[
 {'module': '視頻安防', 'url': 'http://imp-t.tfgreenroad.com:18092/console_api/recep/tv/list', 'id': 1.0, 'params': '{ "queryMsg":"","regionCode":"","devtypeCode":"","online":"","offset":"","limit":1,"type":""}', 'method': 'get', 'actual_res': '', 'data': '', 'expect_res': '', 'test_res': '', 'case_name': '分頁查詢視頻安防設備列表', 'files': ''},
 {'module': '平臺管理', 'url': 'http://imp-t.tfgreenroad.com:18092/console_api/manage/appsys/info', 'id': 2.0, 'params': '', 'method': 'post', 'actual_res': '', 'data': '{"appName": "hahh","appId": "34434343","appUrl": "http://12306.com","appCode": "89","remark":""}', 'expect_res': '{"code": 200,"errMsg": ""}', 'test_res': '', 'case_name': '應用管理-單個應用系統添加', 'files': ''},
 {'module': '平臺管理', 'url': 'http://imp-t.tfgreenroad.com:18092/console_api/manage/appsys/info/upappid/89', 'id': 3.0, 'params': '', 'method': 'put', 'actual_res': '', 'data': '{"appId": "3232327676888"}', 'expect_res': '{"code": 200,"errMsg": ""}', 'test_res': '', 'case_name': '應用管理-修改應用appId', 'files': ''},
 {'module': '平臺管理', 'url': 'http://imp-t.tfgreenroad.com:18092/console_api/manage/devtype/list', 'id': 4.0, 'params': '{ "queryMsg":"15002","offset":"","limit":""}', 'method': 'get', 'actual_res': '', 'data': '', 'expect_res': '', 'test_res': '', 'case_name': '設備分類-分頁獲取設備類型', 'files': ''}
]

 封裝向excel寫入數據的類,代碼示例:

from xlutils.copy import copy
from xlrd import open_workbook
 
class Write_excel():
 def write_result(self, filename, row, col1,col2,actual_res, test_res,sheet_name):
 '''
 :param filename: 文件名
 :param row: 要寫回的行
 :param col1: 要寫回的列
 :param col2: 要寫回的列
 :param actual_res: 實際結果
 :param test_res: 測試結果 :pass/failed
 :param sheet_name:指定的sheet表索引
 :return:
 '''
 old_workbook = open_workbook(filename)
 # 將已存在的excel拷貝進新的excel
 new_workbook = copy(old_workbook)
 # 獲取sheet
 new_worksheet = new_workbook.get_sheet(sheet_name) # 第n個sheet,0表示第一個sheet
 # 寫入數據
 new_worksheet.write(row, col1, actual_res)
 new_worksheet.write(row, col2, test_res)
 # 保存
 new_workbook.save("book.xlsx")
 
if __name__ == '__main__':
 Write_excel()

上述內容就是怎么在Python中利用接口自動化對excel文件進行讀寫,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南皮县| 绥阳县| 长岭县| 鹤庆县| 麻江县| 万宁市| 苏尼特右旗| 昭通市| 赤水市| 教育| 象州县| 马公市| 儋州市| 航空| 丰城市| 淳化县| 洛浦县| 开阳县| 巴楚县| 南和县| 霍州市| 新乡市| 许昌市| 洞口县| 名山县| 龙山县| 修水县| 屏南县| 涟水县| 基隆市| 延长县| 资中县| 敦化市| 讷河市| 汝城县| 绍兴市| 玉田县| 颍上县| 台中县| 泗洪县| 桂东县|