最近想嘗試著做一個接口自動化的腳本,首先得需要從文件中讀取數據,很早之前更新過一篇,但是局限性較大,一次性只能讀取一個Excel的一張sheet表,且讀取出的格式也無法滿足要求,找了好多方法,終于研究出來啦。
也遇到了很多坑,因為自學python,沒有系統的學習過,基礎知識也不扎實,且平時工作也沒有用到,過段時間就需要從頭學起 =_=,所以遇到的坑都是基礎知識沒掌握到的原因啦。記錄一下吧,方便以后復習或知識回顧。
現在是坑:
def getTables():
for excel in os.listdir(data_path):
print(excel)
if excel.startswith('~'):
break
excelPath = os.path.join(data_path, excel)
excels = xlrd.open_workbook(excelPath)
sheetNames = excels.sheet_names()
print('sheetNames:',sheetNames)
return sheetNames #這兒我就直接把獲取到的sheet名return了,這是一個list類型
def getData(sheets):
data = []
for i in range(2, sheets.nrows):#寫這兒的時候,sheets無法自動帶出nrows,強行寫上去也會報錯
data.append(dict(zip(sheets.row_values(1), sheets.row_values(i))))
print('讀取出的data:',data)
getData(getTables())
既然list沒有這個方法,len()也可以獲取所有的行數啊,所以我就換成了len(),這樣:
def getData(sheets):
data = []
for i in range(2, len(sheets)):
data.append(dict(zip(sheets.row_values(1), sheets.row_values(i))))
print('讀取出的data:',data)
?然而還是不行:
于是再回頭看了下之前寫的test,恍然大悟:
附上正確的代碼
import os,xlrd
data_path = os.path.join('F:\pythonProjrect\itf_simple','data')#os.path.join()函數:連接兩個或更多的路徑名
print(data_path)
#獲取目錄下所有Excel中sheet
def getTables():
for excel in os.listdir(data_path):#os.listdir() 方法用于返回指定的文件夾包含的文件或文件夾的名字的列表
print(excel)
if excel.startswith('~'):
break
excelPath = os.path.join(data_path, excel)#拼接路徑
excels = xlrd.open_workbook(excelPath)
sheetNames = excels.sheet_names()#獲取目錄下所有sheet的名字,sheetNames為list類型
print('sheetNames:',sheetNames)
# 循環從sheetNames中讀取sheet表,返回的是sheet的內存地址
for sheet in sheetNames:
table = excels.sheet_by_name(sheet)
print('table:',table)
return table
#從getTables()中返回的table中提取數據,sheet中的數據組成一個列表,Excel中的表頭和數據分別組成key:value的格式
def getData(sheets):
data = []
for i in range(2, sheets.nrows):
data.append(dict(zip(sheets.row_values(1), sheets.row_values(i))))
print('讀取出的data:',data)
getData(getTables())
這樣就運行出來啦~
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
