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实用日期时间处理方法汇总
May 09 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
Dec 11 Python
PyTorch线性回归和逻辑回归实战示例
May 22 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
Dec 05 Python
python中的colorlog库使用详解
Jul 05 Python
PyQt5通信机制 信号与槽详解
Aug 07 Python
python基于TCP实现的文件下载器功能案例
Dec 10 Python
详解Python中的分支和循环结构
Feb 11 Python
Python猴子补丁Monkey Patch用法实例解析
Mar 23 Python
Python3爬虫里关于Splash负载均衡配置详解
Jul 10 Python
python3中TQDM库安装及使用详解
Nov 18 Python
详解Python如何批量采集京东商品数据流程
Jan 22 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/09/13 PHP
C#使用PHP服务端的Web Service通信实例
2014/04/08 PHP
php的XML文件解释类应用实例
2014/09/22 PHP
分享下php5类中三种数据类型的区别
2015/01/26 PHP
PHP中的多种加密技术及代码示例解析
2016/10/20 PHP
php从数据库读取数据,并以json格式返回数据的方法
2018/08/21 PHP
Javascript结合css实现网页换肤功能
2009/11/02 Javascript
测试你的JS的掌握程度的代码
2009/12/09 Javascript
JavaScript统计网站访问次数的实现代码
2015/11/18 Javascript
xcode中获取js文件的路径方法(推荐)
2016/11/05 Javascript
Angular.js中ng-include用法及多标签页面的实现方式详解
2017/05/07 Javascript
vue中axios解决跨域问题和拦截器的使用方法
2018/03/07 Javascript
AngularJS自定义过滤器用法经典实例总结
2018/05/17 Javascript
Vue实现用户自定义字段显示数据的方法
2018/08/28 Javascript
JQuery实现ul中添加LI和删除指定的Li元素功能完整示例
2019/10/16 jQuery
vue2.x 通过后端接口代理,获取qq音乐api的数据示例
2019/10/30 Javascript
JavaScript async/await原理及实例解析
2020/12/02 Javascript
Python通过递归遍历出集合中所有元素的方法
2015/02/25 Python
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
2015/04/09 Python
使用Python设置tmpfs来加速项目的教程
2015/04/17 Python
python中的break、continue、exit()、pass全面解析
2017/08/05 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
2018/01/27 Python
NumPy.npy与pandas DataFrame的实例讲解
2018/07/09 Python
对numpy中数组转置的求解以及向量内积计算方法
2018/10/31 Python
Python Django 封装分页成通用的模块详解
2019/08/21 Python
python实现复制大量文件功能
2019/08/31 Python
python 使用cx-freeze打包程序的实现
2020/03/14 Python
python DES加密与解密及hex输出和bs64格式输出的实现代码
2020/04/13 Python
Django基于客户端下载文件实现方法
2020/04/21 Python
python轮询机制控制led实例
2020/05/03 Python
服务行业个人求职的自我评价
2013/12/12 职场文书
小区门卫岗位职责
2013/12/31 职场文书
幼儿园实习生辞职信
2014/01/20 职场文书
城管大队整治方案
2014/05/06 职场文书
2014院党委领导班子对照检查材料思想汇报
2014/09/24 职场文书
军训结束新闻稿
2015/07/17 职场文书