Python 操作 Excel 數(shù)據(jù)表:數(shù)據(jù)讀取
從這節(jié)課開始,我們就正式的進(jìn)入 Python 辦公自動化的學(xué)習(xí)中去了,上一個小節(jié)說過我們的課程劃分了四部分。那么這節(jié)課就是課程第一部分 “Office 自動化” 的第一課:用 Python 操作 Excel 數(shù)據(jù)表。
Excel 由于其直觀的界面、出色的計算功能和圖表工具,目前已經(jīng)成為最流行的個人計算機(jī)數(shù)據(jù)處理軟件,在日常辦公中必不可少。而借助于 Python 可以讓用戶更加高效的使用 Excel,減少重復(fù)性的工作,我們之前也說過,Python 擁有大量的第三方庫可以幫助我們完成豐富的場景,這節(jié)課我們將學(xué)習(xí)用來操作 Excel 的第三方庫:xlrd。
1. xlrd 模塊
xlrd 是一個用于從 Excel 文件(.xls/.xlsx)讀取數(shù)據(jù)和格式化信息的庫。在內(nèi)容正式開始前,建議先回顧下 Excel 文件中的一些名詞概念,即工作簿、工作表、行、列、單元格,如下圖所示。
1.1 安裝
xlrd 是 Python 的第三方庫,使用前需要通過以下命令進(jìn)行安裝:
pip install xlrd
1.2 使用步驟
步驟 1:導(dǎo)入 xlrd 模塊
通過 import xlrd 完成導(dǎo)入。
import xlrd
步驟 2:加載 Excel 文件
import xlrd
data = xlrd.open_workbook("data.xlsx")
open_workboox () 方法返回當(dāng)前工作簿的一個實(shí)例,后續(xù)的操作都是通過這個實(shí)例進(jìn)行。
步驟 3:讀取數(shù)據(jù)
拿到 Excel 的實(shí)例后,即可通過 xlrd 模塊提供的方法進(jìn)行數(shù)據(jù)的讀取。
2. xlrd 模塊使用
這部分內(nèi)容我們將針對 Excel 中常用概念:工作表、列、行、單元格,依次對應(yīng)介紹 xlrd 模塊的操作方法。接下來的所有操作都將圍繞工作簿 data.xlsx 進(jìn)行,data.xlsx 中存放的是一份某店鋪的銷售明細(xì),data.xlsx 中包括 2 個工作表(sheet),每個工作表內(nèi)容如下圖所示:
2.1 xlrd 操作 Excel 工作表
在一個工作簿中可以定義多個工作表(sheet),而數(shù)據(jù)真正所存放的位置正是在工作表中,所以在開始讀取數(shù)據(jù)前,首先需要對工作表進(jìn)行操作,常用屬性,見下表:
屬性 | 描述 |
---|---|
nsheets | 獲取工作簿中 sheet 的數(shù)量 |
對應(yīng)代碼中訪問,如下所示:
import xlrd
data = xlrd.open_workbook("data.xlsx")
print(data.nsheets) # 輸出:2
通過上述代碼,可以得知在 data.xlsx 文件中,共有 2 個工作表(sheet)。xlrd 操作工作表(sheet)常用方法,見下表。
方法 | 描述 |
---|---|
sheets() | 獲取所有 sheet 的對象,以列表形式顯示 |
sheet_by_index(sheetx ) | 根據(jù)索引返回對應(yīng)的 sheet |
sheet_by_name(sheet_name ) | 通過 sheet 名稱返回對應(yīng) sheet |
sheet_names() | 返回工作簿中所有 sheet 名稱 |
sheet_loaded(sheet_name_or_index ) | 通過 sheet 名稱或索引判斷該 sheet 是否導(dǎo)入成功,返回值為 bool 類型,True 表示已導(dǎo)入,F(xiàn)alse 表示未導(dǎo)入 |
unload_sheet(sheet_name_or_index ) | 通過 sheet 名稱或索引取消 sheet 加載 |
下面來具體看下每個方法的使用:
sheets () 方法
import xlrd
data = xlrd.open_workbook("data.xlsx")
print(data.sheets())
# 輸出:[<xlrd.sheet.Sheet object at 0x02A28EB0>, <xlrd.sheet.Sheet object at 0x02A28F30>, <xlrd.sheet.Sheet object at 0x02A28EF0>]
代碼解釋:sheets () 方法為獲取 excel 中所有的工作表(sheet)對象,目前 data.xlsx 中共包含三個 sheet,所以這里輸出返回三個 sheet 對象,后續(xù)可以通過每個 sheet 對象來對 sheet 中的行、列、單元格進(jìn)行操作。
sheet_by_index () 方法
import xlrd
data = xlrd.open_workbook("data.xlsx")
print(data.sheet_by_index(0))
# 輸出:<xlrd.sheet.Sheet object at 0x02A08EB0>
代碼解釋:sheet_by_index () 方法是根據(jù)索引獲取 excel 中的工作表(sheet),上述代碼中傳遞 0,表示獲取索引為 0 的 sheet 對象,可以通過 sheets () 方法的輸出結(jié)果與 sheet_by_index () 方法的輸出結(jié)果進(jìn)行對比,即可發(fā)現(xiàn),第一個 sheet 在內(nèi)存中的位置是相同的,都是 0x02A08EB0。
sheet_by_name () 方法
import xlrd
data = xlrd.open_workbook("data.xlsx")
print(data.sheet_by_name("Sheet1"))
# 輸出:<xlrd.sheet.Sheet object at 0x02A08EB0>
代碼解釋:sheet_by_name () 方法是根據(jù)工作表名稱來獲取 excel 中的工作表(sheet),上述代碼中傳遞 “Sheet1”,對應(yīng)到 data.xlsx 中即第一個工作表。
sheet_names () 方法
import xlrd
data = xlrd.open_workbook("data.xlsx")
print(data.sheet_names())
# 輸出:['Sheet1', 'Sheet2', 'Sheet3']
代碼解釋:sheet_names () 方法為返回工作簿中所有工作表的名稱,本小節(jié)中 data.xlsx 共包含 3 個工作表,固這里返回 [‘Sheet1’, ‘Sheet2’, ‘Sheet3’]。
sheet_loaded () 方法
import xlrd
data = xlrd.open_workbook("data.xlsx")
print(data.sheet_loaded(0))
# 輸出:True
代碼解釋:sheet_loaded () 方法表示指定工作表是否已導(dǎo)入(加載),返回值為布爾類型,其中參數(shù)可以為索引或工作表名稱,代碼中傳遞為 0,表示檢查第一個工作表是否已導(dǎo)入(加載),xlrd 模塊在使用 open_workbook () 方法加載工作簿時,其所有工作表均已加載完成,所以在輸出時,輸出 True。
unload_sheet () 方法
import xlrd
data = xlrd.open_workbook("data.xlsx")
print(data.sheet_loaded(0))#輸出:True
data.unload_sheet(0)
print(data.sheet_loaded(0))#輸出:False
print(data.sheet_loaded(1))#輸出:True
代碼解釋:unload_sheet () 方法表示取消指定工作表導(dǎo)入(加載),其中參數(shù)可以為索引或工作表名稱,代碼中傳遞為 0,表示取消第一個工作表導(dǎo)入(加載),代碼中共做了三次輸出,第一次為初始判斷第一個工作表是否加載,返回 True,第二次輸出時,第一個工作表已經(jīng)被取消加載,固輸出 False,第三次輸出為第二個工作表是否加載,輸出 True。
2.2 xlrd 操作 Excel 列
xlrd 中在工作表中對 Excel 列進(jìn)行操作,常用屬性,見下表。
屬性 | 描述 |
---|---|
ncols | 獲取指定工作表中總列數(shù) |
對應(yīng)代碼中訪問,如下所示:
import xlrd
data=xlrd.open_workbook("data.xlsx")
sheet=data.sheet_by_index(0)
print(sheet.ncols) #輸出 8
想要對 Excel 列進(jìn)行操作,首先需要找到具體的工作表,在上述代碼中,通過 sheet_by_index 方法得到第一個工作表(sheet),工作表索引從 0 開始,對應(yīng)工作簿中效果為從左到右排列。得到具體的工作表后,訪問 ncols 屬性輸出 8,即表示在 data.xlsx 文件中第一個工作表(sheet)共有 8 列數(shù)據(jù)。
xlrd 中操作 Excel 列的常用方法,見下表。
方法 | 描述 |
---|---|
col(colx) | 返回給定列所有單元格對象組成的列表 |
col_values(colx[,start_rowx,end_rowx,]) | 返回給定列中單元格的值 |
col_types(colx[,start_rowx,end_rowx,]) | 返回給定列中單元格類型 |
下面來具體看下每個方法的使用:
col () 方法
import xlrd
data = xlrd.open_workbook("data.xlsx")
sheet=data.sheet_by_index(0)
print(sheet.col(1))
#輸出:[empty:'', text:'貨號', text:'X0001', text:'X0002', text:'X0003', text:'X0004', text:'X0005', text:'X0006', text:'X0007', text:'X0008', text:'X0009']
代碼解釋:col () 方法返回指定列所有單元格對象組成的列表,代碼中傳遞 1,表示獲取索引為 1 的列,由于索引從 0 開始,即表示獲取的是第 2 列的所有單元格對象。
col_values () 方法
import xlrd
data = xlrd.open_workbook("data.xlsx")
sheet=data.sheet_by_index(0)
print(sheet.col_values(1))
#輸出:['', '貨號', 'X0001', 'X0002', 'X0003', 'X0004', 'X0005', 'X0006', 'X0007', 'X0008', 'X0009']
代碼解釋:col_values () 方法返回指定列所有單元格的值,代碼中傳遞 1,即表示獲取的是第 2 列的所有單元格的值,以列表的形式返回。
col_types () 方法
import xlrd
data = xlrd.open_workbook("data.xlsx")
sheet=data.sheet_by_index(0)
print(sheet.col_types(4))
#輸出:[0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2]
代碼解釋:col_types () 方法返回指定列所有單元格的類型,代碼中傳遞 5,表示獲取索引為 4 的列,由于索引從 0 開始,即表示獲取的是第 5 列的所有單元格的類型。返回結(jié)果中,0 表示空,1 表示字符串,2 表示數(shù)字。
2.3 xlrd 操作 Excel 行
xlrd 中在工作表中對 Excel 行進(jìn)行操作,常用屬性,見下表。
屬性 | 描述 |
---|---|
nrows | 獲取指定工作表中總行數(shù) |
對應(yīng)代碼中訪問,如下所示:
import xlrd
data=xlrd.open_workbook("data.xlsx")
sheet=data.sheet_by_index(0)
print(sheet.nrows) #輸出 4
在上述代碼中,通過 sheet_by_index 方法得到第一個工作表(sheet),訪問 nrows 屬性輸出 4,即表示在 data.xlsx 文件中第一個工作表(sheet)共有 4 行數(shù)據(jù)。
xlrd 中操作 Excel 行的常用方法,見下表。
方法 | 描述 |
---|---|
row(rowx) | 返回給定行所有單元格對象 |
row_values(rowx[,start_colx,end_colx,]) | 返回給定行中單元格的值 |
row_types(rowx[,start_colx,end_colx,]) | 返回給定行中單元格類型 |
下面來具體看下每個方法的使用:
row () 方法
import xlrd
data = xlrd.open_workbook("data.xlsx")
sheet=data.sheet_by_index(1)
print(sheet.row(1))
#輸出:[text:'日期', text:'貨號', text:'顏色', text:'尺碼', text:'原價', text:'折扣', text:'備注']
代碼解釋:row () 方法返回指定行所有單元格對象組成的列表,代碼中傳遞 1,表示獲取索引為 1 的行,由于索引從 0 開始,即表示獲取的是第 2 行的所有單元格對象。
row_values () 方法
import xlrd
data = xlrd.open_workbook("data.xlsx")
sheet=data.sheet_by_index(1)
print(sheet.row_values(1))
#輸出:['日期', '貨號', '顏色', '尺碼', '原價', '折扣', '備注']
代碼解釋:row_values () 方法返回指定行所有單元格的值,代碼中傳遞 1,即表示獲取的是第 2 行的所有單元格的值,以列表的形式返回。
row_types () 方法
import xlrd
data = xlrd.open_workbook("data.xlsx")
sheet=data.sheet_by_index(0)
print(sheet.row_types(3))
#輸出:array('B', [1, 1, 1, 1, 2, 2, 1])
代碼解釋:row_types () 方法返回指定行所有單元格的類型,代碼中傳遞 3,表示獲取索引為 3 的行,由于索引從 0 開始,即表示獲取的是第 4 行的所有單元格的類型。返回結(jié)果中,1 表示空,2 表示數(shù)字。
2.4 xlrd 操作 Excel 單元格
單元格即表格中行與列的交叉部分,具體的內(nèi)容也是寫在單元格中,在獲取單元格內(nèi)容時需要通過行和列進(jìn)行定位。常用操作單元格方法,見下表。
方法 | 描述 |
---|---|
cell(rowx,colx) | 返回指定行和列中單元格對象 |
cell_value(rowx,colx) | 返回指定行和列中單元格的值 |
cell_type(rowx,colx) | 返回指定行和列中單元格的類型 |
下面來具體看下每個方法的使用:
cell () 方法
import xlrd
data = xlrd.open_workbook("data.xlsx")
sheet=data.sheet_by_index(0)
print(sheet.cell(1,2))
#輸出:text:'顏色'
代碼解釋:cell () 方法根據(jù)指定的行索引和列索引,返回指定單元格對象。代碼中傳遞 1,2,表示獲取行所以為 1,列索引為 2 的單元格對象,即第 2 行第 3 列的單元格對象。
cell_value () 方法
import xlrd
data = xlrd.open_workbook("data.xlsx")
sheet=data.sheet_by_index(1)
print(sheet.cell_value(1,2))
#輸出:顏色
代碼解釋:cell_value () 方法返回指定行索引和列索引符合條件的單元格的值。代碼中傳遞 1,2,即第 2 行第 3 列的單元格的值。
cell_type () 方法
import xlrd
data = xlrd.open_workbook("data.xlsx")
sheet=data.sheet_by_index(0)
print(sheet.cell_type(1,2))
#輸出:1
代碼解釋:cell_type () 方法返回指定行索引和列索引符合條件的單元格類型。代碼中傳遞 1,2,即第 2 行第 3 列的單元格類型,輸出結(jié)果 1 表示為字符串類型。
除了上述方法可以獲取到單元格中內(nèi)容之外,也可以在獲取到單元格對象后,通過單元格對象屬性對單元格的值、類型進(jìn)行獲取,見下表。
屬性 | 描述 |
---|---|
ctype | 獲取單元格數(shù)據(jù)類型 |
value | 獲取單元格中的值 |
下面來具體看下每個屬性的使用:
ctype 方法
import xlrd
data = xlrd.open_workbook("data.xlsx")
sheet=data.sheet_by_index(0)
print(sheet.cell(1,2).ctype)
#輸出:1
代碼解釋:獲取到單元格對象后,通過 ctype 屬性來獲取單元格數(shù)據(jù)類型。代碼中通過 cell (1,2) 表示獲取到了行索引為 1,列索引為 2 的單元格對象,通過 ctype 屬性獲取單元格類型,輸出 1 表示為字符串類型。
value 方法
import xlrd
data = xlrd.open_workbook("data.xlsx")
sheet=data.sheet_by_index(0)
print(sheet.cell(1,2).value)
#輸出:顏色
代碼解釋:獲取到單元格對象后,通過 value 屬性來獲取單元格的值。代碼中通過 cell (1,2) 表示獲取到了行索引為 1,列索引為 2 的單元格對象,通過 value 屬性獲取單元格的值。
3. 小結(jié)
本節(jié)課程我們主要學(xué)習(xí)了 xlrd 模塊的使用。本節(jié)課程的重點(diǎn)如下:
- 回顧 Excel 中各名詞概念;
- 了解 xlrd 模塊作用及使用步驟;
- 掌握 xlrd 模塊操作 Excel 工作表(sheet)、行、列、單元格的常用屬性和方法。