解决python执行较大excel文件openpyxl慢问题


Posted in Python onMay 15, 2020

我就废话不多说了,大家还是直接看代码吧!

talk is cheap

from openpyxl import Workbook
  from openpyxl.utils import get_column_letter
  from openpyxl import load_workbook
  import time
  wb = load_workbook("E:/a.xlsx", read_only=True)
  sh = wb["Sheet"]
  # rowItem = {}
  # for j in range(1,2000):
  #   for i in range(1, 30):
  #     rowItem[get_column_letter(i)] = i
  #   sh.append(rowItem)
  # wb.save("E:/a.xlsx")
  t0 = time.time()
  print(sh['V500'].value)
  t1 = time.time()
  print("openpyxl所用时间:", str(t1-t0))

  import xlrd
  xlsPath = "E:/a.xlsx"
  WorkBook = xlrd.open_workbook(xlsPath)
  sh = WorkBook.sheet_by_name("Sheet")

  t0 = time.time()
  print(sh.cell(499,22).value)
  t1 = time.time()
  print("xlrd所用时间:", str(t1-t0))

测试结果:

22
openpyxl所用时间: 0.44217610359191895
23.0
xlrd所用时间: 0.0010063648223876953

结论

openpyxl的慢是读取慢,可以选择xlrd代替,详细测试下面继续

不直接使用xlwt+xlrd是因为xlwt仅支持2003及以下版本,最大行数限制在65536,不够用,而openpyxl大概在一百多万

主要的说完了,下面详细说了:在写工具的时候遇到的这个问题,开始是用的xlwt+xlrd,然后行数超标了,没办法换成openpyxl使用excel2007的版本,原本测试不到三万行的数据,只要三四秒,换成openpyxl以后,花了好几分钟,具体没看多少了,然后加上函数运行时间的监视器以后,才看到是读取的时候出的问题

推测原因:

推测的话,openpyxl的根据行号列号读取的时候,是从第一行第一列开始遍历,直到行号等于指定行号,列号等于指定列号,所以要读取的行号列号越多就越慢,(也可能是从第一个有数据的行或列),而xlrd则是类似与数组一样,我们要取第几个元素,直接根据下标找到内存中对应地址的元素即可,所以无论excel总量多少,速度基本都是不变的

留下的坑

xlwt写入仅支持65536行,那xlrd的读取很可能也是,也就是超过这么多的数据可能也会出错

我这里因为是读多表数据生成单表数据,生成方式大概是Na*Nb这样,所以实际读取的不会太多,但生成的很多,所以基本可以用考虑这个问题

另外,据说xlrd读取xlsx格式的偶尔会出现问题,具体没测试,暂时用还没毛病

最后,顺带上一下监控函数运行时间的装饰器吧:

import time
from functools import wraps

def fn_timer(function):
  @wraps(function)
  def function_timer(*args, **kwargs):
    t0 = time.time()
    result = function(*args, **kwargs)
    t1 = time.time()
    print ("Total time running %s: %s seconds" %
      (function.__name__, str(t1-t0))
      )
    return result
  return function_timer

使用方式的话,就是在要监控的函数定义上面加上 @fn_timer 就行了

以上这篇解决python执行较大excel文件openpyxl慢问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现通过pil模块对图片格式进行转换的方法
Mar 24 Python
使用python检测主机存活端口及检查存活主机
Oct 12 Python
Python编程中对文件和存储器的读写示例
Jan 25 Python
python 处理dataframe中的时间字段方法
Apr 10 Python
python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix实现
Jun 11 Python
python2.7使用plotly绘制本地散点图和折线图
Apr 02 Python
Pytorch之卷积层的使用详解
Dec 31 Python
PyQt5实现登录页面
May 30 Python
PyTorch-GPU加速实例
Jun 23 Python
pyqt5实现井字棋的示例代码
Dec 07 Python
python中的时区问题
Jan 14 Python
手把手教你实现PyTorch的MNIST数据集
Jun 28 Python
python可迭代对象去重实例
May 15 #Python
python 操作mysql数据中fetchone()和fetchall()方式
May 15 #Python
Python实现UDP程序通信过程图解
May 15 #Python
解决pymysql cursor.fetchall() 获取不到数据的问题
May 15 #Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
May 15 #Python
pymysql之cur.fetchall() 和cur.fetchone()用法详解
May 15 #Python
django 利用Q对象与F对象进行查询的实现
May 15 #Python
You might like
php第一次无法获取cookie问题处理
2014/12/15 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
2017/03/10 PHP
Laravel框架模板继承操作示例
2018/06/11 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
Yii Framework框架使用PHPExcel组件的方法示例
2019/07/24 PHP
JS 实现完美include载入实现代码
2010/08/05 Javascript
jquery $.getJSON()跨域请求
2011/12/21 Javascript
JSON序列化与解析原生JS方法且IE6和chrome测试通过
2013/09/05 Javascript
javascript实现yield的方法
2013/11/06 Javascript
浅析JavaScript声明变量
2015/12/21 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
2016/11/21 Javascript
jQuery使用JSONP实现跨域获取数据的三种方法详解
2017/05/04 jQuery
.vue文件 加scoped 样式不起作用的解决方法
2018/05/28 Javascript
element ui table(表格)实现点击一行展开功能
2018/12/04 Javascript
详解VSCode配置启动Vue项目
2019/05/14 Javascript
javascript实现日历效果
2019/06/17 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
2019/08/02 jQuery
java和js实现的洗牌小程序
2019/09/30 Javascript
js实现转动骰子模型
2019/10/24 Javascript
javascript实现前端分页功能
2020/11/26 Javascript
python实现查找两个字符串中相同字符并输出的方法
2015/07/11 Python
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
python+selenium实现163邮箱自动登陆的方法
2017/12/31 Python
python字符串的方法与操作大全
2018/01/30 Python
python 删除指定时间间隔之前的文件实例
2018/04/24 Python
numpy返回array中元素的index方法
2018/06/27 Python
python绘制评估优化算法性能的测试函数
2019/06/25 Python
500行代码使用python写个微信小游戏飞机大战游戏
2019/10/16 Python
基于Python词云分析政府工作报告关键词
2020/06/02 Python
pymongo insert_many 批量插入的实例
2020/12/05 Python
美容院店长岗位职责
2014/04/08 职场文书
高校优秀辅导员事迹材料
2014/05/07 职场文书
酒店辞职书怎么写
2015/02/26 职场文书
护士求职自荐信范文
2015/03/04 职场文书
银行求职信范文
2019/05/13 职场文书