python各种excel写入方式的速度对比


Posted in Python onNovember 10, 2020

经过实验,新建一个excel表格,该表格拥有7个sheet,每个sheet有800条数据,其中最后一个sheet为空。

首先使用openpyxl进行写入操作,代码如下:

book = openpyxl.Workbook()
auths = Auth.objects.filter(owner_id=1)
filename = '导出数据'
for auth in auths:
  sheet = book.create_sheet(auth.name, index = 0)
  sheet.append([
      _("书名"),
      _("作者"),
      _("译者"),
      _("出版社"),
      _("序列号"),
      _("总页数"),
    ])
  objs = None
  objs = Book.objects.filter(owner_id=auth.id)
  for u in objs:
    data = []
    data.append(u.name)
    data.append(auth.name)
    data.append(u.translator)
    data.append(u.press)
    data.append(u.serializer)
    data.append(u.page)
    sheet.append(data)
return ExcelBookResponse(book, filename)

使用xlwt写入数据:

book = xlwt.Workbook()
auths = Auth.objects.filter(owner_id=1)
filename = '导出数据'
for auth in auths:
  sheet = book.add_sheet(sensor.name)
  sheet.write(0, 0, _("书名"))
  sheet.write(0, 1, _("作者"))
  sheet.write(0, 2, _("译者"))
  sheet.write(0, 3, _("出版社"))
  sheet.write(0, 4, _("序列号"))
  sheet.write(0, 5, _("总页数"))
  i = 1
  objs = None
  objs = Book.objects.filter(owner_id=auth.id)
  for u in objs:
    sheet.write(i, 0, u.name)
    sheet.write(i, 1, auth.name)
    sheet.write(i ,2,u.translator)
    sheet.write(i ,3,u.press)
    sheet.write(i, 4, u.serializer)
    sheet.write(i, 5, u.page)
    i += 1
return ExcelBookResponse(book, filename)

使用XlsxWriter写入数据:

book = xlsxwriter.Workbook(output)
auths = Auth.objects.filter(owner_id=1)
for auth in auths:
  sheet = book.add_worksheet(sensor.name)
  header = [
      _("书名"),
      _("作者"),
      _("译者"),
      _("出版社"),
      _("序列号"),
      _("总页数"),
    ]
  sheet.write_row("A1", header)
  objs = Book.objects.filter(owner_id=auth.id)
  i = 1
  for u in objs:
    sheet.write(i, 0, u.name)
    sheet.write(i, 1, auth.name)
    sheet.write(i ,2,u.translator)
    sheet.write(i ,3,u.press)
    sheet.write(i, 4, u.serializer)
    sheet.write(i, 5, u.page)
    i += 1
book.close()
file_ext = 'xlsx'
mimetype = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
# self['Content-Disposition'] = 'attachment; filename*=UTF-8\'\'"{2}.{1}"; filename="{0}.{1}"'.format(filename.replace('"', '\"'), file_ext, urllib.parse.quote(filename.replace('"', '\"'))).encode('utf8')
return HttpResponse(content=output.getvalue(), content_type=mimetype)

三者的时间比较(两种方式的文件内容是一样的):

openpyxl: 文件大小为110.75kb, 平均时间大约为570ms

xlwt: 文件大小为505.91kb,平均时间大约为440ms

XlsxWrite: 文件大小为109.28kb,平均时间大约为500ms

xlwt写入的行数有限制,因此对于较大的文件来说,XlsxWrite的速度较快一点

补充知识:python写入excel文件太慢如何解决-python往excel写入大量数据

目前用的openpyxl,从数据库获取8W行的数据通过openpyxl写入excel,要花费接近8分钟,这也太慢了,用kettle的插件秒进,python有什么方法能提升速度么,或者openpyxl能批量插入么,按行效率太低了

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from openpyxl import Workbook as wbook
def xlsx(filename, rows_info, sheet='Result'):
if filename and sheet:
wb = wbook()
_sheet = wb.active
_sheet.title = sheet
row = _sheet.max_row
for line in rows_info:
if isinstance(line, str):
row_list = [line]
elif isinstance(line, dict):
row_list = list(line.values())
else:
try:
row_list = list(line)
except:
row_list = []
for col in range(0, len(row_list)):
col_info = row_list[col]
_sheet.cell(row, col + 1, col_info)
row += 1
wb.save(filename)
else:
return '文件和sheet不能为空'

以上这篇python各种excel写入方式的速度对比就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python进程间通信之共享内存详解
Oct 30 Python
对numpy数据写入文件的方法讲解
Jul 09 Python
python把数组中的数字每行打印3个并保存在文档中的方法
Jul 17 Python
python-itchat 获取微信群用户信息的实例
Feb 21 Python
使用python来调用CAN通讯的DLL实现方法
Jul 03 Python
pandas计算最大连续间隔的方法
Jul 04 Python
python 求某条线上特定x值或y值的点坐标方法
Jul 09 Python
如何解决django-celery启动后迅速关闭
Oct 16 Python
使用Python实现牛顿法求极值
Feb 10 Python
python中如何写类
Jun 29 Python
用python批量解压带密码的压缩包
May 31 Python
python 详解turtle画爱心代码
Feb 15 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
Nov 10 #Python
详解vscode实现远程linux服务器上Python开发
Nov 10 #Python
Python调用飞书发送消息的示例
Nov 10 #Python
python中pyplot基础图标函数整理
Nov 10 #Python
python图片合成的示例
Nov 09 #Python
python 实现"神经衰弱"翻牌游戏
Nov 09 #Python
Python字典dict常用方法函数实例
Nov 09 #Python
You might like
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
PHP文件操作实例总结【文件上传、下载、分页】
2018/12/08 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
JavaScript DOM 学习第七章 表单的扩展
2010/02/19 Javascript
js 设置选中行的样式的实现代码
2010/05/24 Javascript
用JQuery调用Session的实现代码
2010/10/29 Javascript
onclick与listeners的执行先后问题详细解剖
2013/01/07 Javascript
将json当数据库一样操作的javascript lib
2013/10/28 Javascript
js写的方法实现上传图片之后查看大图
2014/03/05 Javascript
jQuery插件scroll实现无缝滚动效果
2015/04/27 Javascript
JavaScript AOP编程实例
2015/06/16 Javascript
用原生JS对AJAX做简单封装的实例代码
2016/07/13 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
vue.js实现表格合并示例代码
2016/11/30 Javascript
Vue.js实现按钮的动态绑定效果及实现代码
2017/08/21 Javascript
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
微信小程序实现全局搜索代码高亮的示例
2018/03/30 Javascript
vue里input根据value改变背景色的实例
2018/09/29 Javascript
在移动端使用vue-router和keep-alive的方法示例
2018/12/02 Javascript
vue实现下拉菜单树
2020/10/22 Javascript
[13:56]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第一场
2018/04/06 DOTA
Python实现抓取百度搜索结果页的网站标题信息
2015/01/22 Python
Django查找网站项目根目录和对正则表达式的支持
2015/07/15 Python
Python编程给numpy矩阵添加一列方法示例
2017/12/04 Python
Python多进程multiprocessing.Pool类详解
2018/04/27 Python
Python获取系统所有进程PID及进程名称的方法示例
2018/05/24 Python
对python 命令的-u参数详解
2018/12/03 Python
对Python3中dict.keys()转换成list类型的方法详解
2019/02/03 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
2019/07/12 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
2020/10/31 Python
css3气泡 css3关键帧动画创建的动态通知气泡
2013/02/26 HTML / CSS
医药代表个人求职信范本
2013/12/19 职场文书
带薪年假请假条
2014/02/04 职场文书
冰峪沟导游词
2015/02/09 职场文书
基于Nginx实现限制某IP短时间访问次数
2021/03/31 Servers
Python基础之字符串格式化详解
2021/04/21 Python