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深入学习之特殊方法与多范式
Aug 31 Python
Python中集合的内建函数和内建方法学习教程
Aug 19 Python
Python通过属性手段实现只允许调用一次的示例讲解
Apr 21 Python
基于Python log 的正确打开方式
Apr 28 Python
python sys.argv[]用法实例详解
May 25 Python
python将一组数分成每3个一组的实例
Nov 14 Python
python 提取key 为中文的json 串方法
Dec 31 Python
使用OpenCV实现仿射变换—缩放功能
Aug 29 Python
Tensorflow中tf.ConfigProto()的用法详解
Feb 06 Python
python实现飞机大战游戏(pygame版)
Oct 26 Python
Vs Code中8个好用的python 扩展插件
Oct 12 Python
Python常用断言函数实例汇总
Nov 30 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中strlen和mb_strlen函数的区别
2014/03/07 PHP
ThinkPHP查询中的魔术方法简述
2014/06/25 PHP
ThinkPHP表单自动提交验证实例教程
2014/07/18 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
2014/08/20 PHP
php数组转成json格式的方法
2015/03/09 PHP
PHP中余数、取余的妙用
2015/06/29 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
2016/05/11 PHP
javascript 同时在IE和FireFox获取KeyCode的代码
2010/02/07 Javascript
window.name代替cookie的实现代码
2010/11/28 Javascript
javascript 正则表达式相关应介绍
2012/11/27 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
2013/11/19 Javascript
jQuery实现仿Google首页拖动效果的方法
2015/05/04 Javascript
JavaScript实现级联菜单的方法
2015/06/29 Javascript
JS实现双击编辑可修改状态的方法
2015/08/14 Javascript
js生成随机数的方法实例
2015/10/16 Javascript
this,this,再次讨论javascript中的this,超全面(经典)
2016/01/05 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
深入解析nodejs HTTP服务
2017/07/25 NodeJs
nginx+vue.js实现前后端分离的示例代码
2018/02/12 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
2018/05/09 Javascript
浅探express路由和中间件的实现
2019/09/30 Javascript
vue学习笔记之给组件绑定原生事件操作示例
2020/02/27 Javascript
JS快速实现简单计算器
2020/04/08 Javascript
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
Python 存储字符串时节省空间的方法
2019/04/23 Python
连接pandas以及数组转pandas的方法
2019/06/28 Python
Python打印不合法的文件名
2020/07/31 Python
python 6种方法实现单例模式
2020/12/15 Python
文秘求职信范文
2014/04/10 职场文书
家长给学校的建议书
2014/05/15 职场文书
区政府领导班子个人对照检查材料
2014/09/25 职场文书
公安交警中队队长个人对照检查材料思想汇报
2014/10/05 职场文书
《红领巾真好》教学反思
2016/02/16 职场文书
2019辞职报告范本3篇!
2019/07/23 职场文书
Python采集股票数据并制作可视化柱状图
2022/04/04 Python