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查找第k小元素代码分享
Dec 18 Python
Python线程中对join方法的运用的教程
Apr 09 Python
python实现文件快照加密保护的方法
Jun 30 Python
开始着手第一个Django项目
Jul 15 Python
python实现折半查找和归并排序算法
Apr 14 Python
python生成随机图形验证码详解
Nov 08 Python
使用EduBlock轻松学习Python编程
Oct 08 Python
Python的numpy库下的几个小函数的用法(小结)
Jul 12 Python
利用python实现凯撒密码加解密功能
Mar 31 Python
python3.7.3版本和django2.2.3版本是否可以兼容
Sep 01 Python
python os.rename实例用法详解
Dec 06 Python
python多次执行绘制条形图
Apr 20 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
其他功能
2006/10/09 PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
2010/05/10 PHP
图文介绍PHP添加Redis模块及连接
2015/07/28 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
PHP dirname(__FILE__)原理及用法解析
2020/10/28 PHP
Jquery+CSS3实现一款简洁大气带滑动效果的弹出层
2013/05/15 Javascript
jquery动态添加删除一行数据示例
2014/06/12 Javascript
jQuery入门介绍之基础知识
2015/01/13 Javascript
JavaScript自定义数组排序方法
2015/02/12 Javascript
js操作css属性实现div层展开关闭效果的方法
2015/05/11 Javascript
全屏js头像上传插件源码高清版
2016/03/29 Javascript
jquery编写Tab选项卡滚动导航切换特效
2020/07/17 Javascript
Java  Spring 事务回滚详解
2016/10/17 Javascript
Javascript之面向对象--封装
2016/12/02 Javascript
js 颜色选择插件
2017/01/23 Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
2017/06/19 Javascript
Vue.js框架路由使用方法实例详解
2017/08/25 Javascript
浅谈React中的元素、组件、实例和节点
2018/02/27 Javascript
javascript 构建模块化开发过程解析
2019/09/11 Javascript
JS实现网页时钟特效
2020/03/25 Javascript
node.js如何操作MySQL数据库
2020/10/29 Javascript
Django中URLconf和include()的协同工作方法
2015/07/20 Python
Python实现截屏的函数
2015/07/25 Python
Python解析Excle文件中的数据方法
2018/10/23 Python
int在python中的含义以及用法
2019/06/27 Python
深入了解Django View(视图系统)
2019/07/23 Python
详解python pandas 分组统计的方法
2019/07/30 Python
巴西女装购物网站:Eclectic
2018/04/24 全球购物
创业计划书的内容步骤和要领
2014/01/04 职场文书
安全生产目标管理责任书
2014/07/25 职场文书
交通事故和解协议书
2014/09/25 职场文书
大学生入党自荐书
2015/03/05 职场文书
节约用电通知
2015/04/25 职场文书
党员承诺书格式范文
2015/04/28 职场文书
2016年寒假见闻
2015/10/10 职场文书
详解JavaScript的计时器和按钮效果设置
2022/02/18 Javascript