解决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 相关文章推荐
Python3.2中Print函数用法实例详解
May 19 Python
Python获取系统默认字符编码的方法
Jun 04 Python
Django中的“惰性翻译”方法的相关使用
Jul 27 Python
python文件与目录操作实例详解
Feb 22 Python
Python抓取电影天堂电影信息的代码
Apr 07 Python
Python编程实现二叉树及七种遍历方法详解
Jun 02 Python
python3实现名片管理系统
Nov 29 Python
Django框架自定义session处理操作示例
May 27 Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
May 15 Python
Python模块zipfile原理及使用方法详解
Aug 04 Python
如何判断pytorch是否支持GPU加速
Jun 01 Python
Python实现byte转integer
Jun 03 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中header函数的用法及其注意事项详解
2016/06/13 PHP
php 修改上传文件大小限制实例详解
2016/10/23 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
2017/07/13 PHP
PHP APP微信提现接口代码
2018/09/30 PHP
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
js 禁用浏览器的后退功能的简单方法
2008/12/10 Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
2012/11/13 Javascript
检查输入的是否是数字使用keyCode配合onkeypress事件
2014/01/23 Javascript
javascript中hasOwnProperty() 方法使用指南
2015/03/09 Javascript
基于javascript实现tab切换特效
2016/03/29 Javascript
JS中数据结构之栈
2019/01/01 Javascript
Vue使用zTree插件封装树组件操作示例
2019/04/25 Javascript
JavaScript判断浏览器运行环境的详细方法
2019/06/30 Javascript
js实现GIF动图分解成多帧图片上传
2019/10/24 Javascript
小程序实现图片移动缩放效果
2020/05/26 Javascript
[04:55]完美世界副总裁蔡玮:DOTA2的自由、公平与信任
2013/12/18 DOTA
[00:15]TI9观赛名额抽取
2019/07/10 DOTA
Python实现的Excel文件读写类
2015/07/30 Python
使用Python进行二进制文件读写的简单方法(推荐)
2016/09/12 Python
python机器学习实战之最近邻kNN分类器
2017/12/20 Python
对numpy.append()里的axis的用法详解
2018/06/28 Python
python使用PyQt5的简单方法
2019/02/27 Python
Pytorch中accuracy和loss的计算知识点总结
2019/09/10 Python
Django中自定义模型管理器(Manager)及方法
2019/09/23 Python
基于python实现计算且附带进度条代码实例
2020/03/31 Python
使用keras实现densenet和Xception的模型融合
2020/05/23 Python
Python预测2020高考分数和录取情况
2020/07/08 Python
Python3如何使用多线程升程序运行速度
2020/08/11 Python
Python爬虫抓取论坛关键字过程解析
2020/10/19 Python
用ldap作为django后端用户登录验证的实现
2020/12/07 Python
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
2015/04/24 HTML / CSS
简单掌握CSS3中resize属性的用法
2016/04/01 HTML / CSS
女子锻炼服装和瑜伽服装:Splits59
2019/03/04 全球购物
设备动力科岗位职责范本
2014/02/23 职场文书
关于爱国的演讲稿
2014/05/07 职场文书
银行求职信怎么写
2014/05/26 职场文书