openpyxl打开⼤⽂件很慢_经验Python读写Excel⽂件第三⽅库
汇总
常见库简介
xlrd
xlwt
xlutils
xlwings
openpyxl
xlsxwriter
win32com
DataNitro
pandas
环境配置及可实现操作
注:DataNitro 作为插件使⽤需依托软件本⾝。
读写测试
测试计算机硬件和系统
电脑型号 微星 MS-7846 台式电脑
操作系统 Windows 7 旗舰版 64 位 SP1 (DirectX 11)
处理器 英特尔 Pentium(奔腾) G3260 @ 3.30GHz 双核
主板 微星 H81M-P32L (MS-7846) (英特尔 Haswell - Lynx Point)
内存 4 GB (⾦⼠顿 DDR3 1600MHz)
主硬盘 西数 WDC WD5000AZLX-00ZR6A0 (500 GB / 7200 转 / 分)
显卡 英特尔 Haswell Integrated Graphics Controller (256 MB / 微星)
测试⽤例
⽤例 1. 读.xls ⽂件的整个表(表有 5 个分页,每个分页有 2000 ⾏ 1200 列的整数)。
⽤例 2. 读.xlsx ⽂件的整个表(表有 5 个分页,每个分页有 2000 ⾏ 1200 列的整数)。
⽤例 3. 读.xls ⽂件的整个表(表有 1 个分页,页有 2000 ⾏ 1200 列的整数)。
⽤例 4. 读.xlsx ⽂件的整个表(表有 1 个分页,页有 2000 ⾏ 1200 列的整数)。
⽤例 5. 写.xls ⽂件的整个表(表有 5 个分页,每个分页有 2000 ⾏ 1200 列的整数)。
⽤例 6. 写.xlsx ⽂件的整个表(表有 5 个分页,每个分页有 2000 ⾏ 1200 列的整数)。
⽤例 7. 写.xls ⽂件的整个表(表有 1 个分页,页有 2000 ⾏ 1200 列的整数)。
⽤例 8. 写.xlsx ⽂件的整个表(表有 1 个分页,页有 2000 ⾏ 1200 列的整数)。
测试结果
python怎么读入excel
注 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))
xlrd
import xlrd def test_xlrd_on_demand_false(): # f = xlrd.open_workbook('test_casesead_xls.xls', on_demand=False) f = xlrd.open_workbook('test_casese
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 xlwings
import xlwings def test_xlwings_read(): # f = xlwings.Book('test_casesead_xls.xls') f = xlwings.Book('test_casesead_xlsx.xlsx') import numpy as np f = x openpyxl
import openpyxl def test_openpyxl_read(): f = openpyxl.load_workbook('test_casesead_xlsx.xlsx', read_only=True) c = [65536] * 1200 f = openpyxl.Wor xlsxwriter
import xlsxwriter workbook = xlsxwriter.Workbook('test_caseswrite_xlsx.xlsx') def test_xlsxwriter(): for s in range(1): worksheet = workbook.add_workshe win32com
import win32com.client as win32 excel = ache.EnsureDispatch('Excel.Application') def test_win32com_read(): # wb = excel.Workbooks.Open( 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_casesead_xls.xls', sheet_nam
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论