本文首發於公眾號:Hunter後端
原文連結:Python筆記一之excel的讀取
這裡我常用的 python 對於 excel 的讀取庫有兩個,一個是 xlsxwriter 用於操作 excel 的寫入,一個是 xlrd 用於 excel 檔案的讀取。
使用的庫的版本如下:
- xlsx==1.2.6
- xlrd==1.1.0
xlsxwriter 寫入 excel
新建一個 excel
import xlsxwriter
path = "/Users/hunter/xxx.xlsx"
wb = xlsxwriter.Workbook(path)
新增一個 sheet:
# 定義 sheet 的名稱
sheet_name = "sheet_name"
# 新增一個 sheet 頁
sheet_1 = wb.add_worksheet(sheet_name)
sheet 表格資料的寫入
sheet 的表格資料有幾種方式,一種是透過 x, y 這種座標軸定位的方式,從左上角開始,左上角也就是 'A1' 的位子為 (0, 0)。
比如我們想要在左上角寫入資料:
sheet1.write(0, 0, "A1資料")
如果我們想要在第二行,第三列寫入資料:
sheet1.write(1, 2, "C2資料")
另一種是透過 excel 的單元格名稱來定位寫入,比如 'A1','D4'這種:
sheet1.write("A1", "A1資料")
sheet1.write("F2", "F2資料")
批次寫入
除了單個單元格的資料寫入,我們還可以透過某個起始單元格來批次寫入。
批次寫入可以從橫向寫入,也可以從縱向寫入。
比如如果想要從 C2 單元格開始,橫向寫入 python,java,JS 三條資料,可以如下操作:
sheet1.write_row("C2", ["python", "java", "JS"])
也可以透過 i, j 的定位方式來操作,比如從 "C3" 開始往後寫入:
sheet1.write_row(2, 2, ["python", "java", "JS"])
上面的 write_row() 方法是橫向寫入,從起始位置橫向開始寫,如果是縱向,那就使用 write_column()
儲存
然後將這個 excel 儲存:
wb.close()
xlrd 讀取 excel
注意: 安裝 xlrd 的時候不要安裝預設的版本,當前預設的最新版本不能解析 xlsx 檔案,我這裡選擇的是 xlrd==1.0.0
使用 xlrd 從 excel 中讀取資料的操作方式如下:
獲取 excel
import xlrd
path = "/Users/hunter/xxx.xlsx"
workbook = xlrd.open_workbook(path)
獲取 sheet
獲取 sheet 物件列表:
sheet_list = workbook.sheets()
獲取所有的 sheet 的名稱列表:
sheet_name_list = workbook.sheet_names()
根據索引獲取單個 sheet:
i = 0
sheet = workbook.sheet_by_index(i)
獲取單元格資料
如果直接獲取單元格資料,可以透過座標軸的 x, y 的方式來定位獲取,其中左上角是 (0, 0)。
比如我們想獲取 (0, 0) 位子的資料,也就是 'A1' 的單元格,我們可以:
cell = sheet.cell(0, 0)
獲取到的是這個單元格物件,如果想要獲取其中的值,需要對 cell 物件再取值:
print(cell.value)
也可以直接使用取值的方法:
print(sheet.cell_value(0, 0))
獲取行列資料
上面是透過單元格單個獲取資料,我們可以單獨獲取行和列的資料,比如獲取第二行的單元格:
row_2 = sheet.row(1)
上面獲取到的資料是一個物件列表,每個元素都是一個個的單元格 cell,也就是我們上面透過 cell() 函式獲取到的物件。
如果是想直接取值,則可以:
row_value_2 = sheet.row_values(1)
返回的是一個列表,元素是該行單元的 value 值
檢視該行長度:
row_value_2_len = sheet.row_len(1)
獲取 sheet 的總行數:
nrows = sheet.nrows
根據列獲取資料將函式的 row 換成 col 即可,比如獲取第二列的資料:
col_value_2 = sheet.col_values(1)
如果想獲取更多相關文章,可掃碼關注閱讀: