Python读写Excel文件第三方库汇总,你想要的都在这儿!
---恢复内容开始--- 常见库简介xlrdxlrd是一个从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件。 xlwtxlwt是一个用于将数据和格式化信息写入旧Excel文件的库(如.xls)。 xlutilsxlutils是一个处理Excel文件的库,依赖于xlrd和xlwt。 xlwingsxlwings是一个可以实现从Excel调用Python,也可在python中调用Excel的库。 openpyxlopenpyxl是一个用于读取和编写Excel 2010 xlsx/xlsm/xltx/xltm文件的库。小编整理一套Python资料和PDF,有需要Python学习资料可以加学习群:631441315 ,反正闲着也是闲着呢,不如学点东西啦~~ xlsxwriterxlsxwriter是一个用于创建Excel .xlsx文件的库。 win32comwin32com库存在于pywin32中,是一个读写和处理Excel文件的库。 DataNitroDataNitro是一个内嵌在Excel中的插件。 pandaspandas通过对Excel文件的读写实现数据输入输出 环境配置及可实现操作注:DataNitro作为插件使用需依托软件本身。 读写测试测试计算机硬件和系统电脑型号 微星 MS-7846 台式电脑 测试用例用例1. 读.xls文件的整个表(表有5个分页,每个分页有2000行1200列的整数)。 测试结果注1.xlwt和pandas每个工作页最多写入256列,因此测试用例修改为每页有2000行256列的整数. 注2.xlutils读写依赖于xlrd和xlwt,不单独测试。 注3.openpyxl测试两种模式,一是普通加载写入,二是read_only/write_only模式下的加载写入。 注4.DataNitro要收费,且需依托Excel使用,本次不测试。 读写性能比较单从读写的性能上考虑,win32com的性能是最好的,xlwings其次。 openpyxl虽然操作Excel的功能强大,但读写性能过于糟糕,尤其是写大表时,会占用大量内存(把我的4G内存用完了),开启read_only和write_only模式后对其性能有大幅提升,尤其是对读的性能提升很大,使其几乎不耗时(0.01秒有点夸张,不过确实是加载上了)。pandas把Excel当作数据读写的容器,为其强大的数据分析服务,因此读写性能表现中规中矩,但其对Excel文件兼容性是最好的,支持读写.xls,.xlsx文件,且支持只读表中单一工作页。同样支持此功能的库还有xlrd,但xlrd只支持读,并不支持写,且性能不突出,需要配合xlutils进行Excel操作,并使用xlwt保存数据,而xlwt只能写入.xls文件(另一个可以写入.xls文件的库是pandas,且这两个写入的Excel文件最多只能有256列,其余库就我目前的了解均只能写入.xlsx文件),性能一般。xlsxwriter功能单一,一般用来创建.xlsx文件,写入性能中庸。win32com拥有最棒的读写性能,但该库存在于pywin32的库中,自身没有完善的文档,使用略吃力。xlwings拥有和win32com不相伯仲的读写性能,强大的转换器可以处理大部分数据类型,包括二维的numpy array和pandas DataFrame,可以轻松搞定数据分析的工作。 综合考虑,xlwings的表现最佳,正如其名,xlwings——Make Excel Fly!
便捷性比较本测试目前只是针对Excel文件的读写,并未涉及Excel操作,单从读写的便捷性来讲,各库的表现难分上下,但是win32com和xlwings这两个库可以在程序运行时实时在打开的Excel文件中进行操作,实现过程的可视化,其次xlwings的数据结构转换器使其可以快速的为Excel文件添加二维数据结构而不需要在Excel文件中重定位数据的行和列,因此从读写的便捷性来比较,仍是xlwings胜出。 测试代码计时import timeit if __name__ == ‘__main__‘: # 使用timeit计时 t = timeit.Timer(‘??()‘,setup=‘from __main__ import ??‘) print(t.timeit(number=1)) ? xlrdimport xlrd def test_xlrd_on_demand_false(): # f = xlrd.open_workbook(‘test_casesread_xls.xls‘,on_demand=False) f = xlrd.open_workbook(‘test_casesread_xlsx.xlsx‘,on_demand=False) def test_xlrd_on_demand_true(): # f = xlrd.open_workbook(‘test_casesread_xls.xls‘,on_demand=True) f = xlrd.open_workbook(‘test_casesread_xlsx.xlsx‘,on_demand=True) f.sheet_by_index(0) ? xlwtimport 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_caseswrite_xls.xls‘) ? xlwingsimport xlwings def test_xlwings_read(): # f = xlwings.Book(‘test_casesread_xls.xls‘) f = xlwings.Book(‘test_casesread_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_caseswrite_xlsx.xlsx‘) ? openpyxlimport openpyxl def test_openpyxl_read(): f = openpyxl.load_workbook(‘test_casesread_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_caseswrite_xlsx.xlsx‘) ? xlsxwriterimport xlsxwriter workbook = xlsxwriter.Workbook(‘test_caseswrite_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,65536) workbook.close() ? win32comimport win32com.client as win32 excel = win32.gencache.EnsureDispatch(‘Excel.Application‘) def test_win32com_read(): # wb = excel.Workbooks.Open(‘E:exceltest_casesread_xls.xls‘) wb = excel.Workbooks.Open(‘E:exceltest_casesread_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:exceltest_caseswrite_xlsx.xlsx‘) excel.Application.Quit() ? pandasimport pandas as pd def test_pandas_read(): for i in range(1,6): sheet_name = "Sheet" + str(i) # df = pd.read_excel(‘test_casesread_xls.xls‘,sheet_name) df = pd.read_excel(‘test_casesread_xlsx.xlsx‘,sheet_name) import numpy as np d = np.zeros([2000,255]) d += 65536 df = pd.DataFrame(d) # writer = pd.ExcelWriter(‘test_caseswrite_xls.xls‘) writer = pd.ExcelWriter(‘test_caseswrite_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() ? ---恢复内容结束--- (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |