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进行稳定可靠的文件操作详解
Dec 31 Python
python实现博客文章爬虫示例
Feb 26 Python
Python模拟登陆实现代码
Jun 14 Python
Python爬取附近餐馆信息代码示例
Dec 09 Python
Python request设置HTTPS代理代码解析
Feb 12 Python
Python 实现Windows开机运行某软件的方法
Oct 14 Python
python语言线程标准库threading.local解读总结
Nov 10 Python
python隐藏类中属性的3种实现方法
Dec 19 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
Aug 07 Python
Django如何实现防止XSS攻击
Oct 13 Python
基于Python的身份证验证识别和数据处理详解
Nov 14 Python
pytorch 梯度NAN异常值的解决方案
Jun 05 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
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
淘宝ip地址查询类分享(利用淘宝ip库)
2014/01/07 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
2016/04/02 PHP
PHP与以太坊交互详解
2018/08/24 PHP
对YUI扩展的Gird组件 Part-1
2007/03/10 Javascript
DOM基础教程之使用DOM控制表格
2015/01/20 Javascript
JS动态加载当前时间的方法
2015/02/09 Javascript
javascript针对cookie的基本操作实例详解
2015/11/30 Javascript
Angularjs使用directive自定义指令实现attribute继承的方法详解
2016/08/05 Javascript
Vue绑定内联样式问题
2018/10/17 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
微信小程序之 catalog 切换实现解析
2019/09/12 Javascript
vue watch监控对象的简单方法示例
2021/01/07 Vue.js
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
[00:49]完美世界DOTA2联赛10月28日开团时刻:随便打
2020/10/29 DOTA
Python中的各种装饰器详解
2015/04/11 Python
Python找出最小的K个数实例代码
2018/01/04 Python
pandas获取groupby分组里最大值所在的行方法
2018/04/20 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
2018/10/16 Python
python 修改本地网络配置的方法
2019/08/14 Python
python破解bilibili滑动验证码登录功能
2019/09/11 Python
Python实现非正太分布的异常值检测方式
2019/12/09 Python
Python 过滤错误log并导出的实例
2019/12/26 Python
Django后台管理系统的图文使用教学
2020/01/20 Python
2021年的Python 时间轴和即将推出的功能详解
2020/07/27 Python
详解python方法之绑定方法与非绑定方法
2020/08/17 Python
德国最大的网上足球商店:11teamsports
2019/09/11 全球购物
Nike意大利官网:Nike.com IT
2020/01/19 全球购物
自荐信格式的六要素
2013/09/21 职场文书
幼儿园大班毕业感言
2014/02/06 职场文书
优秀毕业生找工作自荐信
2014/06/23 职场文书
教师党员个人整改措施
2014/10/27 职场文书
雷锋的故事观后感
2015/06/10 职场文书
学校运动会加油词
2015/07/18 职场文书
MySQL 常见存储引擎的优劣
2021/06/02 MySQL
Django框架中表单的用法
2022/06/10 Python