Python读写Excel文件第三方库汇总
常見(jiàn)庫(kù)簡(jiǎn)介
xlrd
xlrd是一個(gè)從Excel文件讀取數(shù)據(jù)和格式化信息的庫(kù),支持.xls以及.xlsx文件。
http://xlrd.readthedocs.io/en/latest/
? ? 1、xlrd支持.xls,.xlsx文件的讀
? ? 2、通過(guò)設(shè)置on_demand變量使open_workbook()函數(shù)只加載那些需要的sheet,從而節(jié)省時(shí)間和內(nèi)存(該方法對(duì).xlsx文件無(wú)效)。
? ? 3、xlrd.Book對(duì)象有一個(gè)unload_sheet方法,它將從內(nèi)存中卸載工作表,由工作表索引或工作表名稱指定(該方法對(duì).xlsx文件無(wú)效)
xlwt
xlwt是一個(gè)用于將數(shù)據(jù)和格式化信息寫(xiě)入舊Excel文件的庫(kù)(如.xls)。
https://xlwt.readthedocs.io/en/latest/
? ? 1、xlwt支持.xls文件寫(xiě)。
xlutils
xlutils是一個(gè)處理Excel文件的庫(kù),依賴于xlrd和xlwt。
http://xlutils.readthedocs.io/en/latest/
? ? 1、xlutils支持.xls文件。
? ? 2、支持Excel操作。
xlwings
xlwings是一個(gè)可以實(shí)現(xiàn)從Excel調(diào)用Python,也可在python中調(diào)用Excel的庫(kù)。
http://docs.xlwings.org/en/stable/index.html
? ? 1、xlwings支持.xls讀,支持.xlsx文件讀寫(xiě)。
? ? 2、支持Excel操作。
? ? 3、支持VBA。
? ? 4、強(qiáng)大的轉(zhuǎn)換器可以處理大部分?jǐn)?shù)據(jù)類型,包括在兩個(gè)方向上的numpy array和pandas DataFrame。
openpyxl
openpyxl是一個(gè)用于讀取和編寫(xiě)Excel 2010 xlsx/xlsm/xltx/xltm文件的庫(kù)。
https://openpyxl.readthedocs.io/en/stable/
? ? 1、openpyxl支持.xlsx文件的讀寫(xiě)。
? ? 2、支持Excel操作。
? ? 3、加載大.xlsx文件可以使用read_only模式。
? ? 4、寫(xiě)入大.xlsx文件可以使用write_only模式。
xlsxwriter
xlsxwriter是一個(gè)用于創(chuàng)建Excel .xlsx文件的庫(kù)。
https://xlsxwriter.readthedocs.io/
? ? 1、xlswriter支持.xlsx文件的寫(xiě)。
? ? 2、支持VBA。
? ? 3、寫(xiě)入大.xlsx文件時(shí)使用內(nèi)存優(yōu)化模式。
win32com
win32com庫(kù)存在于pywin32中,是一個(gè)讀寫(xiě)和處理Excel文件的庫(kù)。
http://pythonexcels.com/python-excel-mini-cookbook/
? ? 1、win32com支持.xls,.xlsx文件的讀寫(xiě),支持.xlsx文件的寫(xiě)。
? ? 2、支持Excel操作。
DataNitro
DataNitro是一個(gè)內(nèi)嵌在Excel中的插件。
https://datanitro.com/docs/?
? ? 1、DataNitro支持.xls,.xlsx文件的讀寫(xiě)。
? ? 2、支持Excel操作。
? ? 3、支持VBA。
? ? 4、收費(fèi)
pandas
pandas通過(guò)對(duì)Excel文件的讀寫(xiě)實(shí)現(xiàn)數(shù)據(jù)輸入輸出
http://pandas.pydata.org/
? ? 1、pandas支持.xls,.xlsx文件的讀寫(xiě)。
? ? 2、支持只加載每個(gè)表的單一工作頁(yè)。
環(huán)境配置及可實(shí)現(xiàn)操作
注:DataNitro作為插件使用需依托軟件本身。
參考:https://zhuanlan.zhihu.com/p/23998083
讀寫(xiě)測(cè)試
測(cè)試計(jì)算機(jī)硬件和系統(tǒng)
電腦型號(hào) 微星 MS-7846 臺(tái)式電腦?
操作系統(tǒng) Windows 7 旗艦版 64位 SP1 ( DirectX 11 )
處理器 英特爾 Pentium(奔騰) G3260 @ 3.30GHz 雙核
主板 微星 H81M-P32L (MS-7846) ( 英特爾 Haswell - Lynx Point )
內(nèi)存 4 GB ( 金士頓 DDR3 1600MHz )
主硬盤(pán) 西數(shù) WDC WD5000AZLX-00ZR6A0 ( 500 GB / 7200 轉(zhuǎn)/分 )
顯卡 英特爾 Haswell Integrated Graphics Controller ( 256 MB / 微星 )
測(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é)果
? ? 注1.xlwt和pandas每個(gè)工作頁(yè)最多寫(xiě)入256列,因此測(cè)試用例修改為每頁(yè)有2000行256列的整數(shù).
? ? 注2.xlutils讀寫(xiě)依賴于xlrd和xlwt,不單獨(dú)測(cè)試。
? ? 注3.openpyxl測(cè)試兩種模式,一是普通加載寫(xiě)入,二是read_only/write_only模式下的加載寫(xiě)入。
? ? 注4.DataNitro要收費(fèi),且需依托Excel使用,本次不測(cè)試。
讀寫(xiě)性能比較
? ? 單從讀寫(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ù)類型,包括二維的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勝出。
測(cè)試代碼
計(jì)時(shí)
xlrd
import xlrd def test_xlrd_on_demand_false(): # f = xlrd.open_workbook('test_cases\\read_xls.xls', on_demand=False) f = xlrd.open_workbook('test_cases\\read_xlsx.xlsx', on_demand=False) def test_xlrd_on_demand_true(): # f = xlrd.open_workbook('test_cases\\read_xls.xls', on_demand=True) f = xlrd.open_workbook('test_cases\\read_xlsx.xlsx', on_demand=True) f.sheet_by_index(0)xlwt
import xlwt book = xlwt.Workbook() def test_xlwt(): for s in range(5): sheet = book.add_sheet(str(s)) for i in range(2000): for j in range(256): sheet.write(i, j, 65536) book.save('test_cases\\write_xls.xls')xlwings
import xlwings def test_xlwings_read(): # f = xlwings.Book('test_cases\\read_xls.xls') f = xlwings.Book('test_cases\\read_xlsx.xlsx') import numpy as np f = xlwings.Book('') d = np.zeros([2000, 1200]) d += 65536 def test_xlwings_write(): for s in range(1): sheet = f.sheets.add() sheet.range('A1').value = d f.save('test_cases\\write_xlsx.xlsx')openpyxl
import openpyxl def test_openpyxl_read(): f = openpyxl.load_workbook('test_cases\\read_xlsx.xlsx', read_only=True) c = [65536] * 1200 f = openpyxl.Workbook(write_only=True) def test_openpyxl_write(): for i in range(1): sheet = f.create_sheet(title=str(i)) for row in range(2000): sheet.append(c) f.save('test_cases\\write_xlsx.xlsx')xlsxwriter
import xlsxwriter workbook = xlsxwriter.Workbook('test_cases\\write_xlsx.xlsx') def test_xlsxwriter(): for s in range(1): worksheet = workbook.add_worksheet() for i in range(2000): for j in range(1200): worksheet.write(i, j, 65536) workbook.close()win32com
import win32com.client as win32 excel = win32.gencache.EnsureDispatch('Excel.Application') def test_win32com_read(): # wb = excel.Workbooks.Open('E:\\excel\\test_cases\\read_xls.xls') wb = excel.Workbooks.Open('E:\\excel\\test_cases\\read_xlsx.xlsx')# excel.Visible = True wb = excel.Workbooks.Add() def test_win32com_write(): for i in range(1): ws = wb.Worksheets.Add() ws.Range("A1:ATD2000").Value = 65536 wb.SaveAs('E:\\excel\\test_cases\\write_xlsx.xlsx') excel.Application.Quit()pandas
import pandas as pd def test_pandas_read(): for i in range(1, 6): sheet_name = "Sheet" + str(i) # df = pd.read_excel('test_cases\\read_xls.xls', sheet_name)df = pd.read_excel('test_cases\\read_xlsx.xlsx', sheet_name) import numpy as np d = np.zeros([2000, 255]) d += 65536 df = pd.DataFrame(d) # writer = pd.ExcelWriter('test_cases\\write_xls.xls') writer = pd.ExcelWriter('test_cases\\write_xlsx.xlsx') def test_pandas_write(): df.to_excel(writer, 'Sheet1') df.to_excel(writer, 'Sheet2') df.to_excel(writer, 'Sheet3') df.to_excel(writer, 'Sheet4') df.to_excel(writer, 'Sheet5') writer.save()
————————————————
版權(quán)聲明:本文為CSDN博主「ChrisMinions」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_34617032/article/details/80433939
總結(jié)
以上是生活随笔為你收集整理的Python读写Excel文件第三方库汇总的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: matlab中直到循环语句,Matlab
- 下一篇: excel mysql插件_智分析Exc