亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

Python 操作 Excel 數據表:數據讀取

從這節課開始,我們就正式的進入 Python 辦公自動化的學習中去了,上一個小節說過我們的課程劃分了四部分。那么這節課就是課程第一部分 “Office 自動化” 的第一課:用 Python 操作 Excel 數據表。

Excel 由于其直觀的界面、出色的計算功能和圖表工具,目前已經成為最流行的個人計算機數據處理軟件,在日常辦公中必不可少。而借助于 Python 可以讓用戶更加高效的使用 Excel,減少重復性的工作,我們之前也說過,Python 擁有大量的第三方庫可以幫助我們完成豐富的場景,這節課我們將學習用來操作 Excel 的第三方庫:xlrd。

1. xlrd 模塊

xlrd 是一個用于從 Excel 文件(.xls/.xlsx)讀取數據和格式化信息的庫。在內容正式開始前,建議先回顧下 Excel 文件中的一些名詞概念,即工作簿、工作表、行、列、單元格,如下圖所示。

圖片描述

1.1 安裝

xlrd 是 Python 的第三方庫,使用前需要通過以下命令進行安裝:

pip install xlrd

1.2 使用步驟

步驟 1:導入 xlrd 模塊

通過 import xlrd 完成導入。

import xlrd

步驟 2:加載 Excel 文件

import xlrd
data = xlrd.open_workbook("data.xlsx")

open_workboox () 方法返回當前工作簿的一個實例,后續的操作都是通過這個實例進行。

步驟 3:讀取數據

拿到 Excel 的實例后,即可通過 xlrd 模塊提供的方法進行數據的讀取。

2. xlrd 模塊使用

這部分內容我們將針對 Excel 中常用概念:工作表、列、行、單元格,依次對應介紹 xlrd 模塊的操作方法。接下來的所有操作都將圍繞工作簿 data.xlsx 進行,data.xlsx 中存放的是一份某店鋪的銷售明細,data.xlsx 中包括 2 個工作表(sheet),每個工作表內容如下圖所示:

圖片描述

圖片描述

2.1 xlrd 操作 Excel 工作表

在一個工作簿中可以定義多個工作表(sheet),而數據真正所存放的位置正是在工作表中,所以在開始讀取數據前,首先需要對工作表進行操作,常用屬性,見下表:

屬性 描述
nsheets 獲取工作簿中 sheet 的數量

對應代碼中訪問,如下所示:

import xlrd
data = xlrd.open_workbook("data.xlsx")
print(data.nsheets) # 輸出:2 

通過上述代碼,可以得知在 data.xlsx 文件中,共有 2 個工作表(sheet)。xlrd 操作工作表(sheet)常用方法,見下表。

方法 描述
sheets() 獲取所有 sheet 的對象,以列表形式顯示
sheet_by_index(sheetx ) 根據索引返回對應的 sheet
sheet_by_name(sheet_name ) 通過 sheet 名稱返回對應 sheet
sheet_names() 返回工作簿中所有 sheet 名稱
sheet_loaded(sheet_name_or_index ) 通過 sheet 名稱或索引判斷該 sheet 是否導入成功,返回值為 bool 類型,True 表示已導入,False 表示未導入
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 對象,后續可以通過每個 sheet 對象來對 sheet 中的行、列、單元格進行操作。

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 () 方法是根據索引獲取 excel 中的工作表(sheet),上述代碼中傳遞 0,表示獲取索引為 0 的 sheet 對象,可以通過 sheets () 方法的輸出結果與 sheet_by_index () 方法的輸出結果進行對比,即可發現,第一個 sheet 在內存中的位置是相同的,都是 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 () 方法是根據工作表名稱來獲取 excel 中的工作表(sheet),上述代碼中傳遞 “Sheet1”,對應到 data.xlsx 中即第一個工作表。

sheet_names () 方法

import xlrd
data = xlrd.open_workbook("data.xlsx")
print(data.sheet_names())
# 輸出:['Sheet1', 'Sheet2', 'Sheet3']

代碼解釋:sheet_names () 方法為返回工作簿中所有工作表的名稱,本小節中 data.xlsx 共包含 3 個工作表,固這里返回 [‘Sheet1’, ‘Sheet2’, ‘Sheet3’]。

sheet_loaded () 方法

import xlrd
data = xlrd.open_workbook("data.xlsx")
print(data.sheet_loaded(0))
# 輸出:True

代碼解釋:sheet_loaded () 方法表示指定工作表是否已導入(加載),返回值為布爾類型,其中參數可以為索引或工作表名稱,代碼中傳遞為 0,表示檢查第一個工作表是否已導入(加載),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 () 方法表示取消指定工作表導入(加載),其中參數可以為索引或工作表名稱,代碼中傳遞為 0,表示取消第一個工作表導入(加載),代碼中共做了三次輸出,第一次為初始判斷第一個工作表是否加載,返回 True,第二次輸出時,第一個工作表已經被取消加載,固輸出 False,第三次輸出為第二個工作表是否加載,輸出 True。

2.2 xlrd 操作 Excel 列

xlrd 中在工作表中對 Excel 列進行操作,常用屬性,見下表。

屬性 描述
ncols 獲取指定工作表中總列數

對應代碼中訪問,如下所示:

import xlrd

data=xlrd.open_workbook("data.xlsx")
sheet=data.sheet_by_index(0) 
print(sheet.ncols) #輸出 8

想要對 Excel 列進行操作,首先需要找到具體的工作表,在上述代碼中,通過 sheet_by_index 方法得到第一個工作表(sheet),工作表索引從 0 開始,對應工作簿中效果為從左到右排列。得到具體的工作表后,訪問 ncols 屬性輸出 8,即表示在 data.xlsx 文件中第一個工作表(sheet)共有 8 列數據。

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 列的所有單元格的類型。返回結果中,0 表示空,1 表示字符串,2 表示數字。

2.3 xlrd 操作 Excel 行

xlrd 中在工作表中對 Excel 行進行操作,常用屬性,見下表。

屬性 描述
nrows 獲取指定工作表中總行數

對應代碼中訪問,如下所示:

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 行數據。

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 行的所有單元格的類型。返回結果中,1 表示空,2 表示數字。

2.4 xlrd 操作 Excel 單元格

單元格即表格中行與列的交叉部分,具體的內容也是寫在單元格中,在獲取單元格內容時需要通過行和列進行定位。常用操作單元格方法,見下表。

方法 描述
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 () 方法根據指定的行索引和列索引,返回指定單元格對象。代碼中傳遞 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 列的單元格類型,輸出結果 1 表示為字符串類型。

除了上述方法可以獲取到單元格中內容之外,也可以在獲取到單元格對象后,通過單元格對象屬性對單元格的值、類型進行獲取,見下表。

屬性 描述
ctype 獲取單元格數據類型
value 獲取單元格中的值

下面來具體看下每個屬性的使用:

ctype 方法

import xlrd
data = xlrd.open_workbook("data.xlsx")
sheet=data.sheet_by_index(0)
print(sheet.cell(1,2).ctype)
#輸出:1

代碼解釋:獲取到單元格對象后,通過 ctype 屬性來獲取單元格數據類型。代碼中通過 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. 小結

本節課程我們主要學習了 xlrd 模塊的使用。本節課程的重點如下:

  • 回顧 Excel 中各名詞概念;
  • 了解 xlrd 模塊作用及使用步驟;
  • 掌握 xlrd 模塊操作 Excel 工作表(sheet)、行、列、單元格的常用屬性和方法。

圖片描述