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使用xlrd读取Excel格式文件的方法
Mar 10 Python
pygame播放音乐的方法
May 19 Python
numpy.random.seed()的使用实例解析
Feb 03 Python
基于Python中numpy数组的合并实例讲解
Apr 04 Python
Python Selenium 之关闭窗口close与quit的方法
Feb 13 Python
django的ORM模型的实现原理
Mar 04 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
Aug 23 Python
解决jupyter运行pyqt代码内核重启的问题
Apr 16 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
Apr 25 Python
Python依赖包迁移到断网环境操作
Jul 13 Python
详解Python 最短匹配模式
Jul 29 Python
Python日志器使用方法及原理解析
Sep 27 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
php Ubb代码编辑器函数代码
2012/07/05 PHP
Laravel 5框架学习之环境与配置
2015/04/08 PHP
深入php内核之php in array
2015/11/10 PHP
Javascript函数的参数
2015/07/16 Javascript
jQuery Validate初步体验(一)
2015/12/12 Javascript
详解javascript传统方法实现异步校验
2016/01/22 Javascript
Angular 根据 service 的状态更新 directive
2016/04/03 Javascript
使用Node.js给图片加水印的方法
2016/11/15 Javascript
几种响应式文字详解
2017/05/19 Javascript
create-react-app修改为多页面支持的方法
2018/05/17 Javascript
vuex 动态注册方法 registerModule的实现
2019/07/03 Javascript
利用d3.js实现蜂巢图表带动画效果
2019/09/03 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
2019/09/12 Javascript
vue中echarts的用法及与elementui-select的协同绑定操作
2020/11/17 Vue.js
python黑魔法之编码转换
2016/01/25 Python
利用ImageAI库只需几行python代码实现目标检测
2019/08/09 Python
PyQt+socket实现远程操作服务器的方法示例
2019/08/22 Python
如何基于Python实现数字类型转换
2020/02/07 Python
Python代码中如何读取键盘录入的值
2020/05/27 Python
浅谈anaconda python 版本对应关系
2020/10/07 Python
Python实现邮件发送的详细设置方法(遇到问题)
2021/01/18 Python
使用numpngw和matplotlib生成png动画的示例代码
2021/01/24 Python
html2canvas生成的图片偏移不完整的解决方法
2020/05/19 HTML / CSS
什么是属性访问器
2015/10/26 面试题
医药工作岗位求职信分享
2013/12/31 职场文书
大学生职业生涯规划方案
2014/01/03 职场文书
大学生学业生涯规划
2014/01/05 职场文书
大学生社会实践方案
2014/05/11 职场文书
销售岗位职责范本
2014/06/12 职场文书
公司应聘自荐书
2014/06/14 职场文书
2014年度安全工作总结
2014/12/04 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
实习协议书
2015/01/27 职场文书
幼儿园三八妇女节活动总结
2015/02/06 职场文书
《分数乘法》教学反思
2016/02/24 职场文书
java中如何截取字符串最后一位
2022/07/07 Java/Android