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使用内存zipfile对象在内存中打包文件示例
Apr 30 Python
python代码制作configure文件示例
Jul 28 Python
python判断字符串是否包含子字符串的方法
Mar 24 Python
在Python中使用Mako模版库的简单教程
Apr 08 Python
python访问系统环境变量的方法
Apr 29 Python
Django 前后台的数据传递的方法
Aug 08 Python
Python实现合并两个有序链表的方法示例
Jan 31 Python
Python3.5面向对象程序设计之类的继承和多态详解
Apr 24 Python
Python  Django 母版和继承解析
Aug 09 Python
Python自省及反射原理实例详解
Jul 06 Python
python dict如何定义
Sep 02 Python
python 使用pandas读取csv文件的方法
Dec 24 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制作unicode解码工具(unicode编码转换器)代码分享
2013/12/24 PHP
set_exception_handler函数在ThinkPHP中的用法
2014/10/31 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
2018/04/20 PHP
Jquery下的26个实用小技巧(jQuery tips, tricks & solutions)
2010/03/01 Javascript
js如何获取file控件的完整路径具体实现代码
2013/05/15 Javascript
javascript中创建对象的几种方法总结
2013/11/01 Javascript
jQuery中对未来的元素绑定事件用bind、live or on
2014/04/17 Javascript
js实现飞入星星特效代码
2014/10/17 Javascript
JavaScript返回上一页的三种方法及区别介绍
2015/07/04 Javascript
javascript运动详解
2015/07/06 Javascript
jQuery链式调用与show知识浅析
2016/05/11 Javascript
详解JavaScript RegExp对象
2017/02/04 Javascript
js实现音频控制进度条功能
2017/04/01 Javascript
vue-cli的webpack模板项目配置文件分析
2017/04/01 Javascript
jQuery为某个div加入行样式
2017/06/09 jQuery
Angular项目中$scope.$apply()方法的使用详解
2017/07/26 Javascript
layui实现下拉框三级联动
2019/07/26 Javascript
[16:19]教你分分钟做大人——风暴之灵
2015/03/11 DOTA
[47:43]完美世界DOTA2联赛PWL S3 Magama vs GXR 第二场 12.19
2020/12/24 DOTA
Django imgareaselect手动剪切头像实现方法
2015/05/26 Python
python绘制圆柱体的方法
2018/07/02 Python
python opencv读mp4视频的实例
2018/12/07 Python
Python装饰器原理与基本用法分析
2020/01/07 Python
Python基于traceback模块获取异常信息
2020/07/23 Python
详解anaconda离线安装pytorchGPU版
2020/09/08 Python
H5新属性audio音频和video视频的控制详解(推荐)
2016/12/09 HTML / CSS
For Art’s Sake官网:手工制作的奢华眼镜
2018/12/15 全球购物
个人求职信范文分享
2013/12/13 职场文书
财务出纳岗位职责
2014/02/03 职场文书
银行竞聘演讲稿
2014/05/16 职场文书
征用土地赔偿协议书
2014/09/26 职场文书
2014个人年度工作总结
2014/12/15 职场文书
先进班组事迹材料
2014/12/25 职场文书
施工安全员岗位职责
2015/04/11 职场文书
金正昆讲礼仪观后感
2015/06/11 职场文书
mysql数据库如何转移到oracle
2022/12/24 MySQL