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使用自定义user-agent抓取网页的方法
Apr 15 Python
python设计模式大全
Jun 27 Python
Python中input与raw_input 之间的比较
Aug 20 Python
Python单向链表和双向链表原理与用法实例详解
Aug 31 Python
Selenium chrome配置代理Python版的方法
Nov 29 Python
Python Pexpect库的简单使用方法
Jan 29 Python
PyQt5实现简易计算器
May 30 Python
Python+Pyqt实现简单GUI电子时钟
Feb 22 Python
Python参数传递及收集机制原理解析
Jun 05 Python
解析python 中/ 和 % 和 //(地板除)
Jun 28 Python
python/golang 删除链表中的元素
Sep 14 Python
详解numpy.ndarray.reshape()函数的参数问题
Oct 13 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
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
2009/06/08 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
在laravel5.2中实现点击用户头像更改头像的方法
2019/10/14 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
2020/05/14 PHP
JavaScript 基础问答三
2008/12/03 Javascript
javaScript Array(数组)相关方法简述
2009/07/25 Javascript
JavaScript 浮点数运算 精度问题
2009/10/06 Javascript
Iframe实现跨浏览器自适应高度解决方法
2014/09/02 Javascript
jquery获取当前日期的方法
2015/01/14 Javascript
jquery判断复选框选中状态以及区分attr和prop
2015/12/18 Javascript
javascript常见数字进制转换实例分析
2016/04/21 Javascript
微信QQ的二维码登录原理js代码解析
2016/06/23 Javascript
一次$.getJSON不执行的简单记录
2016/07/19 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
2016/09/26 Javascript
全屏滚动插件fullPage.js使用实例解析
2016/10/21 Javascript
基于vue实现swipe轮播组件实例代码
2017/05/24 Javascript
vue2 自定义动态组件所遇到的问题
2017/06/08 Javascript
原生js FileReader对象实现图片上传本地预览效果
2020/03/27 Javascript
基于ES6作用域和解构赋值详解
2017/11/03 Javascript
Vue 路由 过渡动效 数据获取方法
2018/07/31 Javascript
防止Layui form表单重复提交的实现方法
2019/09/10 Javascript
Python实现快速多线程ping的方法
2015/07/15 Python
Python数据类型详解(二)列表
2016/05/08 Python
详解Python中的__new__、__init__、__call__三个特殊方法
2016/06/02 Python
python实现文件助手中查看微信撤回消息
2019/04/29 Python
实例详解Python装饰器与闭包
2019/07/29 Python
pygame实现非图片按钮效果
2019/10/29 Python
python获取引用对象的个数方式
2019/12/20 Python
CSS3制作轮播图的一种方法
2019/11/11 HTML / CSS
HTML5 播放 RTSP 视频的实例代码
2019/07/29 HTML / CSS
高档奢华时装在线目的地:FORWARD by elyse walker
2017/10/16 全球购物
什么是Deployment descriptors;都有什么类型的部署描述符
2015/07/28 面试题
如何写一封打动人心的求职信
2014/02/17 职场文书
勤俭节约倡议书
2014/04/14 职场文书
会计实训总结范文
2015/08/03 职场文书
最新最全的手机号验证正则表达式
2022/02/24 Javascript