Python 讀取Excel之xlrd篇
上一期給大家分享了如何用Python讀取文本,這次給大家分享如何讀取Excel表格內容,拿最常見的.xlsx和.xls格式來講解。
本章主要知識點有:
- 讀取整篇excel返回list[list[list]] 格式
- 讀取指定sheet頁內容返回list[list[]] 格式
- 讀取任意一行或一列返回list[] 格式
正文:
讀取Excel有多種方法,本章採用比較通用的xlrd庫來實現,先讀取文件,再指定到某sheet頁進行讀取
data = xlrd.open_workbook(filename)
table = data.sheet_by_name(sheetName)
如上程式碼中,將sheet頁賦給了table變數,再根據table頁的總行數和總列數,逐個輸出單元格的內容
# 獲取總行數和總列數 tRows = table.nrows tCols = table.ncols #獲取某個單元格的內容 table.cell(r,c).value
結合以上資訊,可以完整的輸出讀取sheet頁內容的函數,並輸出list格式
1 def readBySheet(self, sheetName : str) -> list: 2 data = xlrd.open_workbook(self.files) 3 4 # get table cont by sheet name 5 table = data.sheet_by_name(sheetName) 6 7 tRows = table.nrows 8 tCols = table.ncols 9 10 # read Excel 11 res = [] 12 for r in range(tRows): 13 rescol = [] 14 for c in range(tCols): 15 rescol.append(table.cell(r,c).value) 16 res.append(rescol) 17 return res
既然都可以輸出某sheet頁的內容了,那麼讀取整篇excel 的內容,只要知道所有sheet頁的名稱即可,xlrd庫也提供了這樣一種方法 data.sheet_names(),即輸出seheet頁的列表,結合以上程式碼,那麼讀取整篇excel的方法實現如下
1 def read(self) -> list: 2 data = xlrd.open_workbook(self.files) 3 tablelist = data.sheet_names() 4 5 res = [] 6 for name in tablelist: 7 res.append(self.readBySheet(name)) 8 return res
擴展:
在開發項目中,有時並不需要讀取整個table頁的內容,或許只需要某一列或某一行的值,其實xlrd早就考慮到了,使用 table.row_values(row)和table.col_values(col),其中row 和 col 為行和列index,小編也將其封裝好了,方便讀者直接調用
1 def readAnyRows(self, sheetName : str, row : int) -> list: 2 data = xlrd.open_workbook(self.files) 3 table = data.sheet_by_name(sheetName) 4 return table.row_values(row) if table.nrows > row else 'row out of range' 5 6 def readAnyCols(self, sheetName : str, col : int) -> list: 7 data = xlrd.open_workbook(self.files) 8 table = data.sheet_by_name(sheetName) 9 return table.col_values(col) if table.ncols > col else 'col out of range'
了解了以上幾種方法,我相信在處理表格場景時都可以遊刃有餘。建議封裝成模組,方便循環使用。如果想要現成的模組,評論+關注私信我,留下郵箱並回復關鍵詞「excel」,我會第一時間發給你的哦。
後續我會介紹其他讀取excel的方式,譬如openpyxl,pandas等,關注我,你會對Python越來越有興趣!