详解Python操作Excel文件
前言
本篇文章主要總結(jié)了一下利用python操作Excel文件的第三方庫(kù)和方法。
常見(jiàn)庫(kù)簡(jiǎn)介
1.xlrd
xlrd是一個(gè)從Excel文件讀取數(shù)據(jù)和格式化信息的庫(kù),支持.xls以及.xlsx文件。
地址:http://xlrd.readthedocs.io/en/latest/
-
xlrd支持.xls,.xlsx文件的讀
-
通過(guò)設(shè)置on_demand變量使open_workbook()函數(shù)只加載那些需要的sheet,從而節(jié)省時(shí)間和內(nèi)存(該方法對(duì).xlsx文件無(wú)效)。
-
xlrd.Book對(duì)象有一個(gè)unload_sheet方法,它將從內(nèi)存中卸載工作表,由工作表索引或工作表名稱指定(該方法對(duì).xlsx文件無(wú)效)
2.xlwt
xlwt是一個(gè)用于將數(shù)據(jù)和格式化信息寫(xiě)入舊Excel文件的庫(kù)(如.xls)。
地址:https://xlwt.readthedocs.io/en/latest/
-
xlwt支持.xls文件寫(xiě)。
3.xlutils
xlutils是一個(gè)處理Excel文件的庫(kù),依賴于xlrd和xlwt。
地址:http://xlutils.readthedocs.io/en/latest/
-
xlutils支持.xls文件。
-
支持Excel操作。
4.xlwings
xlwings是一個(gè)可以實(shí)現(xiàn)從Excel調(diào)用Python,也可在python中調(diào)用Excel的庫(kù)。
地址:http://docs.xlwings.org/en/stable/index.html
-
xlwings支持.xls讀,支持.xlsx文件讀寫(xiě)。
-
支持Excel操作。
-
支持VBA。
4、強(qiáng)大的轉(zhuǎn)換器可以處理大部分?jǐn)?shù)據(jù)類(lèi)型,包括在兩個(gè)方向上的numpy array和pandas DataFrame。
5.openpyxl
openpyxl是一個(gè)用于讀取和編寫(xiě)Excel 2010 xlsx/xlsm/xltx/xltm文件的庫(kù)。
地址:https://openpyxl.readthedocs.io/en/stable/
-
openpyxl支持.xlsx文件的讀寫(xiě)。
-
支持Excel操作。
-
加載大.xlsx文件可以使用read_only模式。
-
寫(xiě)入大.xlsx文件可以使用write_only模式。
6.xlsxwriter
xlsxwriter是一個(gè)用于創(chuàng)建Excel .xlsx文件的庫(kù)。
地址:https://xlsxwriter.readthedocs.io/
-
xlswriter支持.xlsx文件的寫(xiě)。
-
支持VBA。
-
寫(xiě)入大.xlsx文件時(shí)使用內(nèi)存優(yōu)化模式。
7.win32com
win32com庫(kù)存在于pywin32中,是一個(gè)讀寫(xiě)和處理Excel文件的庫(kù)。
地址:http://pythonexcels.com/python-excel-mini-cookbook/
-
win32com支持.xls,.xlsx文件的讀寫(xiě),支持.xlsx文件的寫(xiě)。
-
支持Excel操作。
8.DataNitro
DataNitro是一個(gè)內(nèi)嵌在Excel中的插件。
地址:https://datanitro.com/docs/
-
DataNitro支持.xls,.xlsx文件的讀寫(xiě)。
-
支持Excel操作。
-
支持VBA。
-
收費(fèi)
9.pandas
pandas通過(guò)對(duì)Excel文件的讀寫(xiě)實(shí)現(xiàn)數(shù)據(jù)輸入輸出
地址:http://pandas.pydata.org/
-
pandas支持.xls,.xlsx文件的讀寫(xiě)。
-
支持只加載每個(gè)表的單一工作頁(yè)。
?
?
提醒及注意:
-
xlutils 僅支持 xls 文件,即2003以下版本;
-
win32com 與 DataNitro 僅支持 windows 系統(tǒng);
-
xlwings 安裝成功后,如果運(yùn)行提示報(bào)錯(cuò)“ImportError: no module named win32api”,請(qǐng)?jiān)侔惭b pypiwin32 或者 pywin32 包;
-
win32com 不是獨(dú)立的擴(kuò)展庫(kù),而是集成在其他庫(kù)中,安裝 pypiwin32 或者 pywin32 包即可使用;
-
DataNitro 是 Excel 的插件,安裝需到官網(wǎng)下載。
基本功能:
由于設(shè)計(jì)目的不同,每個(gè)模塊通常著重于某一方面功能,各有所長(zhǎng)。
1.xlwings
可結(jié)合 VBA 實(shí)現(xiàn)對(duì) Excel 編程,強(qiáng)大的數(shù)據(jù)輸入分析能力,同時(shí)擁有豐富的接口,結(jié)合 pandas/numpy/matplotlib 輕松應(yīng)對(duì) Excel 數(shù)據(jù)處理工作。
2.openpyxl
簡(jiǎn)單易用,功能廣泛,單元格格式/圖片/表格/公式/篩選/批注/文件保護(hù)等等功能應(yīng)有盡有,圖表功能是其一大亮點(diǎn),缺點(diǎn)是對(duì) VBA 支持的不夠好。
3.pandas
數(shù)據(jù)處理是 pandas 的立身之本,Excel 作為 pandas 輸入/輸出數(shù)據(jù)的容器。
4.win32com
從命名上就可以看出,這是一個(gè)處理 windows 應(yīng)用的擴(kuò)展,Excel 只是該庫(kù)能實(shí)現(xiàn)的一小部分功能。該庫(kù)還支持 office 的眾多操作。需要注意的是,該庫(kù)不單獨(dú)存在,可通過(guò)安裝 pypiwin32 或者 pywin32 獲取。
5.xlsxwriter
擁有豐富的特性,支持圖片/表格/圖表/篩選/格式/公式等,功能與openpyxl相似,優(yōu)點(diǎn)是相比 openpyxl 還支持 VBA 文件導(dǎo)入,迷你圖等功能,缺點(diǎn)是不能打開(kāi)/修改已有文件,意味著使用 xlsxwriter 需要從零開(kāi)始。
6.DataNitro
作為插件內(nèi)嵌到 Excel 中,可完全替代 VBA,在 Excel 中使用 python 腳本。既然被稱為 Excel 中的 python,協(xié)同其他 python 庫(kù)亦是小事一樁。然而,這是付費(fèi)插件…
7.xlutils
基于 xlrd/xlwt,老牌 python 包,算是該領(lǐng)域的先驅(qū),功能特點(diǎn)中規(guī)中矩,比較大的缺點(diǎn)是僅支持 xls 文件。
讀寫(xiě)測(cè)試
測(cè)試用例
-
用例1. 讀.xls文件的整個(gè)表(表有5個(gè)分頁(yè),每個(gè)分頁(yè)有2000行1200列的整數(shù))。
-
用例2. 讀.xlsx文件的整個(gè)表(表有5個(gè)分頁(yè),每個(gè)分頁(yè)有2000行1200列的整數(shù))。
-
用例3. 讀.xls文件的整個(gè)表(表有1個(gè)分頁(yè),頁(yè)有2000行1200列的整數(shù))。
-
用例4. 讀.xlsx文件的整個(gè)表(表有1個(gè)分頁(yè),頁(yè)有2000行1200列的整數(shù))。
-
用例5. 寫(xiě).xls文件的整個(gè)表(表有5個(gè)分頁(yè),每個(gè)分頁(yè)有2000行1200列的整數(shù))。
-
用例6. 寫(xiě).xlsx文件的整個(gè)表(表有5個(gè)分頁(yè),每個(gè)分頁(yè)有2000行1200列的整數(shù))。
-
用例7. 寫(xiě).xls文件的整個(gè)表(表有1個(gè)分頁(yè),頁(yè)有2000行1200列的整數(shù))。
-
用例8. 寫(xiě).xlsx文件的整個(gè)表(表有1個(gè)分頁(yè),頁(yè)有2000行1200列的整數(shù))。
測(cè)試結(jié)果
注:
xlwt和pandas每個(gè)工作頁(yè)最多寫(xiě)入256列,因此測(cè)試用例修改為每頁(yè)有2000行256列的整數(shù).
xlutils讀寫(xiě)依賴于xlrd和xlwt,不單獨(dú)測(cè)試。
openpyxl測(cè)試兩種模式,一是普通加載寫(xiě)入,二是read_only/write_only模式下的加載寫(xiě)入。
DataNitro要收費(fèi),且需依托Excel使用,本次不測(cè)試。
性能比較
單從讀寫(xiě)的性能上考慮,win32com的性能是最好的,xlwings其次。
openpyxl雖然操作Excel的功能強(qiáng)大,但讀寫(xiě)性能過(guò)于糟糕,尤其是寫(xiě)大表時(shí),會(huì)占用大量?jī)?nèi)存(把我的4G內(nèi)存用完了),開(kāi)啟read_only和write_only模式后對(duì)其性能有大幅提升,尤其是對(duì)讀的性能提升很大,使其幾乎不耗時(shí)(0.01秒有點(diǎn)夸張,不過(guò)確實(shí)是加載上了)。
pandas把Excel當(dāng)作數(shù)據(jù)讀寫(xiě)的容器,為其強(qiáng)大的數(shù)據(jù)分析服務(wù),因此讀寫(xiě)性能表現(xiàn)中規(guī)中矩,但其對(duì)Excel文件兼容性是最好的,支持讀寫(xiě).xls,.xlsx文件,且支持只讀表中單一工作頁(yè)。同樣支持此功能的庫(kù)還有xlrd,但xlrd只支持讀,并不支持寫(xiě),且性能不突出,需要配合x(chóng)lutils進(jìn)行Excel操作,并使用xlwt保存數(shù)據(jù),而xlwt只能寫(xiě)入.xls文件(另一個(gè)可以寫(xiě)入.xls文件的庫(kù)是pandas,且這兩個(gè)寫(xiě)入的Excel文件最多只能有256列,其余庫(kù)就我目前的了解均只能寫(xiě)入.xlsx文件),性能一般。
xlsxwriter功能單一,一般用來(lái)創(chuàng)建.xlsx文件,寫(xiě)入性能中庸。win32com擁有最棒的讀寫(xiě)性能,但該庫(kù)存在于pywin32的庫(kù)中,自身沒(méi)有完善的文檔,使用略吃力。xlwings擁有和win32com不相伯仲的讀寫(xiě)性能,強(qiáng)大的轉(zhuǎn)換器可以處理大部分?jǐn)?shù)據(jù)類(lèi)型,包括二維的numpy array和pandas DataFrame,可以輕松搞定數(shù)據(jù)分析的工作。
綜合考慮,xlwings的表現(xiàn)最佳,正如其名,xlwings——Make Excel Fly!
便捷性比較
本測(cè)試目前只是針對(duì)Excel文件的讀寫(xiě),并未涉及Excel操作,單從讀寫(xiě)的便捷性來(lái)講,各庫(kù)的表現(xiàn)難分上下,但是win32com和xlwings這兩個(gè)庫(kù)可以在程序運(yùn)行時(shí)實(shí)時(shí)在打開(kāi)的Excel文件中進(jìn)行操作,實(shí)現(xiàn)過(guò)程的可視化,其次xlwings的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換器使其可以快速的為Excel文件添加二維數(shù)據(jù)結(jié)構(gòu)而不需要在Excel文件中重定位數(shù)據(jù)的行和列,因此從讀寫(xiě)的便捷性來(lái)比較,仍是xlwings勝出。
代碼示例
最后,附上一些演示代碼,大家可自行體會(huì)下不同模塊的使用。
6.1 xlwings基本代碼
6.2 xlsxwriter基本代碼
6.3 xlutils基本代碼import xlrd #讀取數(shù)據(jù)
6.4 win32com基本代碼
6.5 openpyxl基本代碼
6.6 DataNitro基本代碼
openpyxl具體使用
1、 創(chuàng)建一個(gè)excel 文件,并寫(xiě)入不同類(lèi)的內(nèi)容
2、創(chuàng)建sheet
3、操作單元格
4、操作已存在的文件
5、操作批量的單元格
6、獲取所有的行(列)對(duì)象:
?
?推薦閱讀(點(diǎn)擊即可跳轉(zhuǎn)閱讀)
?
1.?SpringBoot內(nèi)容聚合
2.?面試題內(nèi)容聚合
3.?設(shè)計(jì)模式內(nèi)容聚合
4.?Mybatis內(nèi)容聚合
5.?多線程內(nèi)容聚合
原文鏈接:https://blog.csdn.net/weixin_38405253/article/details/100512061總結(jié)
以上是生活随笔為你收集整理的详解Python操作Excel文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Fashion-MNIST下载地址
- 下一篇: websocket python爬虫_p