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操作SQLite简明教程
Jul 10 Python
使用Python保存网页上的图片或者保存页面为截图
Mar 05 Python
OpenCV2从摄像头获取帧并写入视频文件的方法
Aug 03 Python
Python实现查找最小的k个数示例【两种解法】
Jan 08 Python
对Python3之方法的覆盖与super函数详解
Jun 26 Python
Python qqbot 实现qq机器人的示例代码
Jul 11 Python
对django views中 request, response的常用操作详解
Jul 17 Python
Python实现获取当前目录下文件名代码详解
Mar 10 Python
如何使用python记录室友的抖音在线时间
Jun 29 Python
基于Python的自媒体小助手---登录页面的实现代码
Jun 29 Python
python logging模块的使用详解
Oct 23 Python
Python 找出英文单词列表(list)中最长单词链
Dec 14 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 中英文混合排版中处理字符串常用的函数
2007/04/12 PHP
php在线代理转向代码
2012/05/05 PHP
php根据分类合并数组的方法实例详解
2013/11/06 PHP
phpmyadmin打开很慢的解决方法
2014/04/21 PHP
PHP错误Warning:mysql_query()解决方法
2015/10/24 PHP
php获得刚插入数据的id 的几种方法总结
2018/05/31 PHP
PHP操作Redis常用命令的实例详解
2020/12/23 PHP
jQuery 渐变下拉菜单
2009/12/15 Javascript
JQueryEasyUI datagrid框架的进阶使用
2013/04/08 Javascript
jQuery实现简单的点赞效果
2020/05/29 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
canvas实现十二星座星空图
2017/02/14 Javascript
基于vue.js实现侧边菜单栏
2017/03/20 Javascript
JavaScript实现图片切换效果
2017/08/12 Javascript
react+ant design实现Table的增、删、改的示例代码
2018/12/27 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
2019/03/15 Javascript
JS实现简易留言板增删功能
2020/02/08 Javascript
[01:07:21]NAVI vs VG Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
Linux环境下MySQL-python安装过程分享
2015/02/02 Python
Python深入06——python的内存管理详解
2016/12/07 Python
Python字典数据对象拆分的简单实现方法
2017/12/05 Python
Python简单过滤字母和数字的方法小结
2019/01/09 Python
python实现的汉诺塔算法示例
2019/10/23 Python
CSS3网格的三个新特性详解
2014/04/04 HTML / CSS
Dr.Jart+美国官网:韩国药妆品牌
2019/01/18 全球购物
YSL圣罗兰美妆英国官网:Yves Saint Laurent Beauty UK
2019/08/03 全球购物
拾金不昧表扬信范文
2014/01/11 职场文书
司仪主持词两篇
2014/03/22 职场文书
合作经营协议书范本
2014/04/17 职场文书
推荐信模板
2014/05/09 职场文书
绿色环保标语
2014/06/12 职场文书
党支部遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
OpenCV-Python模板匹配人眼的实例
2021/06/08 Python
MySQL约束超详解
2021/09/04 MySQL
java如何实现socket连接方法封装
2021/09/25 Java/Android
Python 统计序列中元素的出现频度
2022/04/26 Python