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 12 Python
在Django同1个页面中的多表单处理详解
Jan 25 Python
在Python程序员面试中被问的最多的10道题
Dec 05 Python
python实现祝福弹窗效果
Apr 07 Python
对Python中class和instance以及self的用法详解
Jun 26 Python
Python 字符串、列表、元组的截取与切片操作示例
Sep 17 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
Sep 23 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
Feb 11 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
Mar 25 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
Mar 31 Python
Python实现敏感词过滤的4种方法
Sep 12 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
Dec 04 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使用者状态管理功能的应用
2006/10/09 PHP
不用数据库的多用户文件自由上传投票系统(1)
2006/10/09 PHP
学习PHP session的传递方式
2016/06/15 PHP
PHP中session跨子域的三种实现方法
2016/07/25 PHP
thinkphp Apache配置重启Apache1 restart 出错解决办法
2017/02/15 PHP
php 截取GBK文档某个位置开始的n个字符方法
2017/03/08 PHP
PHP实现的数独求解问题示例
2017/04/18 PHP
PHP数组访问常用方法解析
2020/09/05 PHP
js实现的仿新浪微博完美的时间组件升级版
2011/12/20 Javascript
Jquery 例外被抛出且未被接住原因介绍
2013/09/04 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
2014/04/02 Javascript
最新最热最实用的15个jQuery插件汇总
2015/07/05 Javascript
JS动态改变浏览器标题的方法
2016/04/06 Javascript
AngularJS 实现弹性盒子布局的方法
2016/08/30 Javascript
限时抢购-倒计时的完整实例(分享)
2017/09/17 Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
2019/03/19 Javascript
vue 列表页跳转详情页获取id以及详情页通过id获取数据
2019/03/27 Javascript
Vue实现拖放排序功能的实例代码
2019/07/08 Javascript
vue源码中的检测方法的实现
2019/09/26 Javascript
Vue防止白屏添加首屏动画的实例
2019/10/31 Javascript
vue基于better-scroll实现左右联动滑动页面
2020/06/30 Javascript
[36:33]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.29
2020/12/02 DOTA
python操作MySQL数据库具体方法
2013/10/28 Python
浅谈python配置与使用OpenCV踩的一些坑
2018/04/02 Python
Python 字符串与数字输出方法
2018/07/16 Python
tensorflow更改变量的值实例
2018/07/30 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
centos 安装Python3 及对应的pip教程详解
2019/06/28 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
使用Python-OpenCV消除图像中孤立的小区域操作
2020/07/05 Python
任意一块网页内容实现“活”的背景(目前火狐浏览器专有)
2014/05/07 HTML / CSS
Canvas在超级玛丽游戏中的应用详解
2021/02/06 HTML / CSS
Top Villas美国:豪华别墅出租和度假屋
2018/07/10 全球购物
印尼在线旅游门户网站:NusaTrip
2019/11/01 全球购物
计算机求职信
2014/07/02 职场文书
导游词之海南天涯海角
2019/12/05 职场文书