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登陆asp网站页面的实现代码
Jan 14 Python
小议Python中自定义函数的可变参数的使用及注意点
Jun 21 Python
利用python编写一个图片主色转换的脚本
Dec 07 Python
Python cookbook(数据结构与算法)实现查找两个字典相同点的方法
Feb 18 Python
Numpy数组的保存与读取方法
Apr 04 Python
python+pandas生成指定日期和重采样的方法
Apr 11 Python
python自动发微信监控报警
Sep 06 Python
Python创建一个元素都为0的列表实例
Nov 28 Python
TensorFlow获取加载模型中的全部张量名称代码
Feb 11 Python
python 写函数在一定条件下需要调用自身时的写法说明
Jun 01 Python
PyCharm 解决找不到新打开项目的窗口问题
Jan 15 Python
python 镜像环境搭建总结
Sep 23 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编码转换函数 自动转换字符集支持数组转换
2012/12/16 PHP
PHP中常用的转义函数
2014/02/28 PHP
PHP实现批量生成App各种尺寸Logo
2015/03/19 PHP
Yii框架创建cronjob定时任务的方法分析
2017/05/23 PHP
基于 Swoole 的微信扫码登录功能实现代码
2018/01/15 PHP
php微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
PHP创建XML接口示例
2019/07/04 PHP
Javascript优化技巧之短路表达式详细介绍
2015/03/27 Javascript
javascript求日期差的方法
2016/03/02 Javascript
使用javascript插入样式
2016/03/14 Javascript
Jquery获取第一个子元素简单实例
2016/06/02 Javascript
input输入密码变黑点密文的实现方法
2017/01/09 Javascript
JavaScript提高加载和执行效率的方法
2017/02/03 Javascript
js 奇葩技巧之隐藏代码
2017/08/11 Javascript
Angular中sweetalert弹框的基本使用教程
2018/07/22 Javascript
Vue指令实现OutClick的示例
2020/11/16 Javascript
[02:20]DOTA2中文配音宣传片
2013/05/22 DOTA
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:奇迹哥卡尔秀翻全场
2017/03/28 DOTA
[14:19]2018年度COSER大赛-完美盛典
2018/12/16 DOTA
python的mysqldb安装步骤详解
2017/08/14 Python
Python之dict(或对象)与json之间的互相转化实例
2018/06/05 Python
python用列表生成式写嵌套循环的方法
2018/11/08 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
基于Python函数和变量名解析
2019/07/19 Python
Python中字典与恒等运算符的用法分析
2019/08/22 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
python队列原理及实现方法示例
2019/11/27 Python
python 如何读、写、解析CSV文件
2021/03/03 Python
美国便宜的横幅和标志印刷在线:Best of Signs
2019/05/29 全球购物
个人求职信范例
2014/01/29 职场文书
网络研修随笔感言
2014/02/17 职场文书
班级口号大全
2014/06/09 职场文书
公司承诺函范文
2015/01/21 职场文书
2015年城乡环境综合治理工作总结
2015/07/24 职场文书
初中语文教师研修日志
2015/11/13 职场文书
用Python将库打包发布到pypi
2021/04/13 Python