網(wǎng)站首頁 編程語言 正文
1. 安裝 xlrd 庫
Python 讀取 Excel 中的數(shù)據(jù)主要用到 xlrd 第三方庫。xlrd 其實(shí)就是兩個(gè)單詞的簡化拼接,我們可以把它拆開來看,xl 代表 excel, rd 代表 read, 合并起來就是 xlrd, 意思就是讀 excel 的第三方庫。
這種命名風(fēng)格也正是我們推薦使用的,要做到 “顧名思義”,不要使用晦澀難懂,與所實(shí)現(xiàn)的功能毫無關(guān)聯(lián)的名稱。
OK, 廢話不多說了,下面我們就著手安裝 xlrd 庫,pip 命令如下:
pip install xlrd==1.2.0 -i https://mirrors.aliyun.com/pypi/simple
值得注意的是,我在安裝 xlrd 庫的時(shí)候,指定了 xlrd 的版本,即 xlrd==1.2.0
, 這也是在實(shí)踐中積累的經(jīng)驗(yàn)哦,因?yàn)椴恢付ò姹究偸菚?huì)有各種狀況,為了確保不出錯(cuò),大家盡量按照我這樣安裝吧。否則,出錯(cuò)可別找我哦!
2. 使用 xlrd 庫
2.1 打開 Excel 工作表對(duì)象
(咳咳,戰(zhàn)術(shù)咳嗽!) 首先,我們先梳理一下思路,把概念搞清楚。什么概念呢?就是大家知道什么是工作簿,什么是工作表,什么是單元格嗎?
平時(shí)我們說的 Excel 工作表文件,其實(shí)嚴(yán)格來說它是個(gè)工作簿。然后打開工作簿,里面有多個(gè) Sheet, 我們把這個(gè)稱作 ”工作表“。之后,我們的數(shù)據(jù)是放在單元格里面的。
下面,讓我們?cè)儆脠D片的形式展示,一起要分清概念。
工作簿:
工作表:
單元格:
好的,那么使用 xlrd 讀取 Excel 表中的數(shù)據(jù)的時(shí)候也應(yīng)按照:工作簿 -> 工作表 -> 單元格,這樣的過程去讀取數(shù)據(jù)的。
那么,打開工作對(duì)象的代碼如下:
import xlrd # 打開工作簿 workbook = xlrd.open_workbook(r'C:\Users\Desktop\工作簿1.xlsx') # 三種方式獲取工作表 # worksheet = workbook.sheet_by_index(0) # worksheet = workbook.sheets()[0] worksheet = workbook.sheet_by_name('Sheet1')
代碼解析:
- 首先導(dǎo)入安裝的第三方庫 xlrd.
- 之后,使用 xlrd 庫下的方法 open_workbook(), 打開一個(gè)工作簿,方法里的參數(shù)為工作簿的路徑。
- 最后,根據(jù)拿到的工作簿對(duì)象,指定獲取的工作表。當(dāng)然了,獲取工作表的方法有三種,分別是根據(jù)索引和根據(jù)工作表名稱獲取,索引是從0開始的。只要使用一種方式即可,這里我推薦使用根據(jù)工作表名稱獲取。
2.2 讀取單個(gè)單元格數(shù)據(jù)
那么我們?cè)谏弦恍」?jié)打開了工作表對(duì)象之后,下面就要獲取表里的單元格數(shù)據(jù)了呀!如何獲取單元格數(shù)據(jù)呢?請(qǐng)看下面的代碼:
import xlrd # 打開工作簿 workbook = xlrd.open_workbook(r'C:\Users\Desktop\工作簿1.xlsx') # 獲取工作表 worksheet = workbook.sheet_by_name('Sheet1') # 獲取單元格數(shù)據(jù)的兩種方式 # cell_value = worksheet.cell(0, 0).value cell_value = worksheet.cell_value(0, 0) print(cell_value)
代碼解析:
獲取單元格數(shù)據(jù)的方法也很簡單。這里提供了兩種方法,都可以獲取單元格數(shù)據(jù),大家只要根據(jù)自己習(xí)慣,掌握一種即可。例如,我這里使用的是 cell_value() 方法,方法里傳遞的是單元格的索引。單元格的索引是二維的,第一個(gè)參數(shù)是所在行,第二個(gè)參數(shù)是所在列。需要注意的是,所有的索引都是從 0 開始計(jì)數(shù)的。
2.3 讀取多個(gè)單元格數(shù)據(jù)
上一小節(jié)中,我們使用了 cell_value() 方法獲取單個(gè)單元格數(shù)據(jù),但是這種方式未免效率過于低下了,現(xiàn)在我們想一次性獲取整行或者整列的數(shù)據(jù),該如何去做呢 ?請(qǐng)看下面的代碼:
import xlrd # 打開工作簿 workbook = xlrd.open_workbook(r'C:\Users\Desktop\工作簿1.xlsx') # 獲取工作表 worksheet = workbook.sheet_by_name('Sheet1') # 獲取第一行所有單元格數(shù)據(jù) row_value = workbookt.row(0) # 獲取第一列所有單元格數(shù)據(jù) col_value = workbook.col(0)
代碼解析:
與 2.2 小節(jié)不同的是,我們通過調(diào)用方法 row() 和 col() 分別獲取某行和某列所有單元格數(shù)據(jù),row() 和 col() 內(nèi)傳入的參數(shù)為索引,索引從 0 開始計(jì)數(shù)。例如,row(0) 表示獲取第一行所有單元格數(shù)據(jù),row(1) 表示獲取第二行所有單元格數(shù)據(jù)。
那么我們運(yùn)行上面的代碼段,運(yùn)行結(jié)果如下所示:
[text:'班級(jí)', text:'學(xué)號(hào)', text:'姓名', text:'成績'] ?# row(0) 的結(jié)果值
[text:'班級(jí)'] ? ? # col(0) 的結(jié)果值
通過觀察運(yùn)行結(jié)果,我們發(fā)現(xiàn)運(yùn)行的結(jié)果都是以列表的形式展示的。值得注意的是,列表的數(shù)值并不是字典格式,盡管這和 Python 中字典格式完全一樣,實(shí)際上列表中元素的類型應(yīng)該是 <class 'xlrd.sheet.Cell'>
, 這是 xlrd 中的 cell 對(duì)象,即單元格對(duì)象。單元格對(duì)象有 value 屬性,因此我們可以通過遍歷列表獲得每一個(gè) cell 對(duì)象,然后通過 value 屬性取出每一個(gè) cell 的值。
改造后的代碼如下所示:
import xlrd # 打開工作簿 workbook = xlrd.open_workbook(r'C:\Users\Desktop\工作簿1.xlsx') # 獲取工作表 worksheet = workbook.sheet_by_name('Sheet1') for i in worksheet.row(0): print(i.value) # 獲取單元格數(shù)據(jù) for i in worksheet.col(0): print(i.value) # 獲取單元格數(shù)據(jù)
2.3 讀取所有單元格數(shù)據(jù)
在上一小節(jié)中,我們學(xué)習(xí)了獲取多個(gè)單元格數(shù)據(jù),也就是整行或整列獲取數(shù)據(jù),這樣獲取數(shù)據(jù)的粒度更大,效率自然也更高。那么如果說,我想獲取 Sheet 表中所有的數(shù)據(jù)又該怎么做呢?
要想獲取 Sheet 表中所有單元格數(shù)據(jù),就得知道 Sheet 表有多少行以及多少列。這樣,我們根據(jù)行數(shù)和列數(shù),才能獲取 Sheet 表所有數(shù)據(jù)啊。xlrd 中 worksheet 對(duì)象有兩個(gè)屬性 nrows 和 ncols, 它們分別表示當(dāng)前的 Sheet 表的行數(shù)和列數(shù)。
獲取所有單元格數(shù)據(jù)的代碼如下所示:
import xlrd # 打開工作簿 workbook = xlrd.open_workbook(r'C:\Users\Desktop\工作簿1.xlsx') # 獲取工作表 worksheet = workbook.sheet_by_name('Sheet1') # 根據(jù)行獲取所有單元格數(shù)據(jù) for row in range(worksheet.nrows): for i in worksheet.row(row): print(i.value) # 根據(jù)列獲取單元格數(shù)據(jù) for col in range(worksheet.ncols): for i in worksheet.col(col): print(i.value)
代碼解析:
上面的代碼中,輸出的結(jié)果應(yīng)該都是所有單元格數(shù)據(jù),只不過分別從行和列的角度出發(fā)獲取單元格數(shù)據(jù)。其實(shí),還可以用 cell_value() 方法結(jié)合 nrows 和 ncols 屬性獲取所有單元格數(shù)據(jù),這種方法留給大家自己去嘗試吧!
附:行、列操作
獲取全行數(shù)據(jù)、切片、全行類型、行的有效單元格數(shù)等
# # 獲取整行和整列的值(數(shù)組) k = 2 rows = sheet1_content1.row_values(k); # 獲取第3行內(nèi)容 row_values(rowx=2, start_colx=0, end_colx=None) cols = sheet1_content1.col_values(k); # 獲取第3列內(nèi)容 ### 行操作 對(duì)應(yīng)列操作把 row 換成 col print(sheet1Name,'第',k+1,'行內(nèi)容為',rows) print(sheet1_content1.row_slice(rowx=k))#返回由該行中所有的單元格對(duì)象類型及對(duì)象組成的列表 print(sheet1_content1.row_types(rowx=k, start_colx=0, end_colx=None))#返回由該行中所有的單元格對(duì)象類型及對(duì)象組成的列表 print(sheet1_content1.row(rowx=k))#返回由該行中所有的單元格對(duì)象類型及對(duì)象組成的列表 print(sheet1_content1.row_len(rowx=k)) #返回該行的有效單元格長度 # # 5. 獲取單元格內(nèi)容(三種方式) print(sheet1_content1.cell(0, 1).value) print(sheet1_content1.cell_value(0, 1)) print(sheet1_content1.row(0)[1].value) # print(sheet1_content1.row(10)[10].value) ## 超出索引長度會(huì)報(bào)錯(cuò)
3. 總結(jié)
通過上面的學(xué)習(xí),相信大家對(duì) xlrd 第三方庫的安裝以及使用第三方庫讀取 Excel 中的數(shù)據(jù)的方法有了一定的掌握。學(xué)習(xí)了讀取操作之后,可以通過下一篇博客《使用 Python 第三方庫 xlwt 寫入數(shù)據(jù)到 Excel 工作表》學(xué)習(xí)向 Excel 工作表寫入數(shù)據(jù)。
原文鏈接:https://blog.csdn.net/weixin_43252521/article/details/122173961
相關(guān)推薦
- 2022-06-08 Spring Cloud Ribbon執(zhí)行流程
- 2022-07-13 Docker的資源控制管理
- 2022-10-05 redis?哨兵集群搭建的實(shí)現(xiàn)_Redis
- 2022-06-25 如何利用Pandas刪除某列指定值所在的行_python
- 2022-06-23 C++詳細(xì)講解常用math函數(shù)的用法_C 語言
- 2022-11-01 ElasticSearch寫入流程實(shí)例解析_相關(guān)技巧
- 2022-07-02 react+typescript使用window.ethereum報(bào)錯(cuò)
- 2021-11-09 Android如何實(shí)現(xiàn)時(shí)間線效果(下)_Android
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支