1. 程式人生 > 實用技巧 >Python 讀取Excel之xlrd篇

Python 讀取Excel之xlrd篇

上一期給大家分享瞭如何用Python讀取文字,這次給大家分享如何讀取Excel表格內容,拿最常見的.xlsx和.xls格式來講解。

本章主要知識點有:

  1. 讀取整篇excel返回list[list[list]] 格式
  2. 讀取指定sheet頁內容返回list[list[]] 格式
  3. 讀取任意一行或一列返回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格式

 def readBySheet(self, sheetName : str) -> list:
data = xlrd.open_workbook(self.files) # get table cont by sheet name
table = data.sheet_by_name(sheetName) tRows = table.nrows
tCols = table.ncols # read Excel
res = []
for r in range(tRows):
rescol = []
for c in range(tCols):
rescol.append(table.cell(r,c).value)
res.append(rescol)
return res

既然都可以輸出某sheet頁的內容了,那麼讀取整篇excel 的內容,只要知道所有sheet頁的名稱即可,xlrd庫也提供了這樣一種方法 data.sheet_names(),即輸出seheet頁的列表,結合以上程式碼,那麼讀取整篇excel的方法實現如下

 def read(self) -> list:
data = xlrd.open_workbook(self.files)
tablelist = data.sheet_names() res = []
for name in tablelist:
res.append(self.readBySheet(name))
return res

擴充套件:

在開發專案中,有時並不需要讀取整個table頁的內容,或許只需要某一列或某一行的值,其實xlrd早就考慮到了,使用 table.row_values(row)和table.col_values(col),其中row 和 col 為行和列index,小編也將其封裝好了,方便讀者直接呼叫

 def readAnyRows(self, sheetName : str, row : int) -> list:
data = xlrd.open_workbook(self.files)
table = data.sheet_by_name(sheetName)
return table.row_values(row) if table.nrows > row else 'row out of range' def readAnyCols(self, sheetName : str, col : int) -> list:
data = xlrd.open_workbook(self.files)
table = data.sheet_by_name(sheetName)
return table.col_values(col) if table.ncols > col else 'col out of range'

瞭解了以上幾種方法,我相信在處理表格場景時都可以遊刃有餘。建議封裝成模組,方便迴圈使用。如果想要現成的模組,評論+關注私信我,留下郵箱並回復關鍵詞“excel”,我會第一時間發給你的哦。

後續我會介紹其他讀取excel的方式,譬如openpyxl,pandas等,關注我,你會對Python越來越有興趣!