常见库简介
xlrd
xlrd是一个从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件。
http://xlrd.readthedocs.io/en/latest/
    1、xlrd支持.xls,.xlsx文件的读
    2、通过设置on_demand变量使open_workbook()函数只加载那些需要的sheet,从而节省时间和内存(该方法对.xlsx文件无效)。
    3、xlrd.Book对象有一个unload_sheet方法,它将从内存中卸载工作表,由工作表索引或工作表名称指定(该方法对.xlsx文件无效)

xlwt
xlwt是一个用于将数据和格式化信息写入旧Excel文件的库(如.xls)。
https://xlwt.readthedocs.io/en/latest/
    1、xlwt支持.xls文件写。

xlutils
xlutils是一个处理Excel文件的库,依赖于xlrd和xlwt。
http://xlutils.readthedocs.io/en/latest/
    1、xlutils支持.xls文件。
    2、支持Excel操作。

xlwings
xlwings是一个可以实现从Excel调用Python,也可在python中调用Excel的库。
http://docs.xlwings.org/en/stable/index.html
    1、xlwings支持.xls读,支持.xlsx文件读写。
    2、支持Excel操作。
    3、支持VBA。
    4、强大的转换器可以处理大部分数据类型,包括在两个方向上的numpy array和pandas DataFrame。

openpyxl
openpyxl是一个用于读取和编写Excel 2010 xlsx/xlsm/xltx/xltm文件的库。
https://openpyxl.readthedocs.io/en/stable/
    1、openpyxl支持.xlsx文件的读写。
    2、支持Excel操作。
    3、加载大.xlsx文件可以使用read_only模式。
    4、写入大.xlsx文件可以使用write_only模式。

xlsxwriter
xlsxwriter是一个用于创建Excel .xlsx文件的库。
https://xlsxwriter.readthedocs.io/
    1、xlswriter支持.xlsx文件的写。
    2、支持VBA。
    3、写入大.xlsx文件时使用内存优化模式。

win32com
win32com库存在于pywin32中,是一个读写和处理Excel文件的库。
http://pythonexcels.com/python-excel-mini-cookbook/
    1、win32com支持.xls,.xlsx文件的读写,支持.xlsx文件的写。
    2、支持Excel操作。

DataNitro
DataNitro是一个内嵌在Excel中的插件。
https://datanitro.com/docs/ 
    1、DataNitro支持.xls,.xlsx文件的读写。
    2、支持Excel操作。
    3、支持VBA。
    4、收费

pandas
pandas通过对Excel文件的读写实现数据输入输出
http://pandas.pydata.org/
    1、pandas支持.xls,.xlsx文件的读写。
    2、支持只加载每个表的单一工作页。

环境配置及可实现操作

注:DataNitro作为插件使用需依托软件本身。
参考:https://zhuanlan.zhihu.com/p/23998083

读写测试

测试计算机硬件和系统
电脑型号 微星 MS-7846 台式电脑 
操作系统 Windows 7 旗舰版 64位 SP1 ( DirectX 11 )
处理器 英特尔 Pentium(奔腾) G3260 @ 3.30GHz 双核
主板 微星 H81M-P32L (MS-7846) ( 英特尔 Haswell - Lynx Point )
内存 4 GB ( 金士顿 DDR3 1600MHz )
主硬盘 西数 WDC WD5000AZLX-00ZR6A0 ( 500 GB / 7200 转/分 )
显卡 英特尔 Haswell Integrated Graphics Controller ( 256 MB / 微星 )

测试用例
用例1. 读.xls文件的整个表(表有5个分页,每个分页有2000行1200列的整数)。
用例2. 读.xlsx文件的整个表(表有5个分页,每个分页有2000行1200列的整数)。
用例3. 读.xls文件的整个表(表有1个分页,页有2000行1200列的整数)。
用例4. 读.xlsx文件的整个表(表有1个分页,页有2000行1200列的整数)。
用例5. 写.xls文件的整个表(表有5个分页,每个分页有2000行1200列的整数)。
用例6. 写.xlsx文件的整个表(表有5个分页,每个分页有2000行1200列的整数)。
用例7. 写.xls文件的整个表(表有1个分页,页有2000行1200列的整数)。
用例8. 写.xlsx文件的整个表(表有1个分页,页有2000行1200列的整数)。

测试结果

注1.xlwt和pandas每个工作页最多写入256列,因此测试用例修改为每页有2000行256列的整数.
    注2.xlutils读写依赖于xlrd和xlwt,不单独测试。
    注3.openpyxl测试两种模式,一是普通加载写入,二是read_only/write_only模式下的加载写入。
    注4.DataNitro要收费,且需依托Excel使用,本次不测试。

读写性能比较
    单从读写的性能上考虑,win32com的性能是最好的,xlwings其次。
    openpyxl虽然操作Excel的功能强大,但读写性能过于糟糕,尤其是写大表时,会占用大量内存(把我的4G内存用完了),开启read_only和write_only模式后对其性能有大幅提升,尤其是对读的性能提升很大,使其几乎不耗时(0.01秒有点夸张,不过确实是加载上了)。pandas把Excel当作数据读写的容器,为其强大的数据分析服务,因此读写性能表现中规中矩,但其对Excel文件兼容性是最好的,支持读写.xls,.xlsx文件,且支持只读表中单一工作页。同样支持此功能的库还有xlrd,但xlrd只支持读,并不支持写,且性能不突出,需要配合xlutils进行Excel操作,并使用xlwt保存数据,而xlwt只能写入.xls文件(另一个可以写入.xls文件的库是pandas,且这两个写入的Excel文件最多只能有256列,其余库就我目前的了解均只能写入.xlsx文件),性能一般。xlsxwriter功能单一,一般用来创建.xlsx文件,写入性能中庸。win32com拥有最棒的读写性能,但该库存在于pywin32的库中,自身没有完善的文档,使用略吃力。xlwings拥有和win32com不相伯仲的读写性能,强大的转换器可以处理大部分数据类型,包括二维的numpy array和pandas DataFrame,可以轻松搞定数据分析的工作。
    综合考虑,xlwings的表现最佳,正如其名,xlwings——Make Excel Fly!

便捷性比较
    本测试目前只是针对Excel文件的读写,并未涉及Excel操作,单从读写的便捷性来讲,各库的表现难分上下,但是win32com和xlwings这两个库可以在程序运行时实时在打开的Excel文件中进行操作,实现过程的可视化,其次xlwings的数据结构转换器使其可以快速的为Excel文件添加二维数据结构而不需要在Excel文件中重定位数据的行和列,因此从读写的便捷性来比较,仍是xlwings胜出。

测试代码
计时

import timeit  if __name__ == '__main__':  # 使用timeit计时  t = timeit.Timer('??()', setup='from __main__ import ??')  print(t.timeit(number=1))

xlrd

import xlrd  def test_xlrd_on_demand_false():  # f = xlrd.open_workbook('test_cases\\read_xls.xls', on_demand=False)  f = xlrd.open_workbook('test_cases\\read_xlsx.xlsx', on_demand=False)  def test_xlrd_on_demand_true():  # f = xlrd.open_workbook('test_cases\\read_xls.xls', on_demand=True)  f = xlrd.open_workbook('test_cases\\read_xlsx.xlsx', on_demand=True)  f.sheet_by_index(0)

xlwt

import xlwt  book = xlwt.Workbook()
def test_xlwt():  for s in range(5):  sheet = book.add_sheet(str(s))  for i in range(2000):  for j in range(256):  sheet.write(i, j, 65536)  book.save('test_cases\\write_xls.xls')  

xlwings

import xlwings  def test_xlwings_read():  # f = xlwings.Book('test_cases\\read_xls.xls') f = xlwings.Book('test_cases\\read_xlsx.xlsx')  import numpy as np  f = xlwings.Book('')
d = np.zeros([2000, 1200])
d += 65536  def test_xlwings_write():  for s in range(1):  sheet = f.sheets.add()  sheet.range('A1').value = d  f.save('test_cases\\write_xlsx.xlsx') 

openpyxl

import openpyxl  def test_openpyxl_read():  f = openpyxl.load_workbook('test_cases\\read_xlsx.xlsx', read_only=True)  c = [65536] * 1200
f = openpyxl.Workbook(write_only=True)  def test_openpyxl_write():  for i in range(1):  sheet = f.create_sheet(title=str(i))  for row in range(2000):  sheet.append(c)  f.save('test_cases\\write_xlsx.xlsx')  

xlsxwriter

import xlsxwriter  workbook = xlsxwriter.Workbook('test_cases\\write_xlsx.xlsx')
def test_xlsxwriter():  for s in range(1):  worksheet = workbook.add_worksheet()  for i in range(2000):  for j in range(1200):  worksheet.write(i, j, 65536)  workbook.close() 

win32com

import win32com.client as win32  excel = win32.gencache.EnsureDispatch('Excel.Application')
def test_win32com_read():  # wb = excel.Workbooks.Open('E:\\excel\\test_cases\\read_xls.xls')  wb = excel.Workbooks.Open('E:\\excel\\test_cases\\read_xlsx.xlsx')# excel.Visible = True  wb = excel.Workbooks.Add()
def test_win32com_write():  for i in range(1):  ws = wb.Worksheets.Add()  ws.Range("A1:ATD2000").Value = 65536  wb.SaveAs('E:\\excel\\test_cases\\write_xlsx.xlsx')  excel.Application.Quit()  

pandas

import pandas as pd  def test_pandas_read():  for i in range(1, 6):  sheet_name = "Sheet" + str(i)  # df = pd.read_excel('test_cases\\read_xls.xls', sheet_name)df = pd.read_excel('test_cases\\read_xlsx.xlsx', sheet_name)  import numpy as np
d = np.zeros([2000, 255])
d += 65536
df = pd.DataFrame(d)
# writer = pd.ExcelWriter('test_cases\\write_xls.xls')
writer = pd.ExcelWriter('test_cases\\write_xlsx.xlsx')
def test_pandas_write():  df.to_excel(writer, 'Sheet1')  df.to_excel(writer, 'Sheet2')  df.to_excel(writer, 'Sheet3')  df.to_excel(writer, 'Sheet4')  df.to_excel(writer, 'Sheet5')  writer.save() 

————————————————
版权声明:本文为CSDN博主「ChrisMinions」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34617032/article/details/80433939

Python读写Excel文件第三方库汇总相关推荐

  1. Python读写Excel文件第三方库汇总,你想要的都在这儿!

    常见库简介 xlrd xlrd是一个从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件. http://xlrd.readthedocs.io/en/latest/ 1.xlrd ...

  2. python处理office文件的第三方库_Python读写Excel文件第三方库汇总,你想要的都在这儿!...

    Python Python开发 Python语言 Python读写Excel文件第三方库汇总,你想要的都在这儿! ---恢复内容开始--- 常见库简介 xlrd xlrd是一个从Excel文件读取数据 ...

  3. python中读写excel的扩展库_Python读写Excel文件第三方库汇总,你想要的都在这儿!...

    常见库简介 xlrd xlrd是一个从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件. http://xlrd.readthedocs.io/en/latest/ 1.xlrd ...

  4. python写入excel公式有哪些库_Python读写Excel文件第三方库汇总,你想要的都在这儿!...

    常见库简介 xlrd xlrd是一个从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件. http://xlrd.readthedocs.io/en/latest/ 1.xlrd ...

  5. python与excel常用的第三方库_Python读写Excel文件第三方库汇总

    常见库简介 xlrd xlrd是一个从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件. http://xlrd.readthedocs.io/en/latest/ 1.xlrd ...

  6. pandas把一个excel的特定数据写到另一个excel_Python读写Excel文件第三方库汇总,你想要的都在这儿!...

    常见库简介 xlrd xlrd是一个从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件.http://xlrd.readthedocs.io/en/latest/ 1.xlrd支 ...

  7. python处理excel教程实例-python 读写excel文件操作示例【附源码下载】

    本文实例讲述了python 读写excel文件操作.分享给大家供大家参考,具体如下: 对excel文件的操作,python有第三方的工具包支持,xlutils,在这个工具包中包含了xlrd,xlwt等 ...

  8. python: 读写excel文件

    文章目录 python 读写 excel 文件 Excel 文件简略描述 xlwt xlrd xlutils 读写 xlrd 读取 xlwt 写 xlutils 任务练习 python 读写 exce ...

  9. python更新excel内容_[原创]使用 Python 读写 Excel 文件(一)更新

    项目要求 如果说是 Office 办公软件使得 Windows 成为主流的操作系统,那么 Excel 就是使得微软硬起来的法宝! Word 和 PowerPoint 都有不相上下的对手,但 Excel ...

最新文章

  1. linux怎么进入gnu grub_十项Linux常识,你知道吗?
  2. 升学在线如何从容应对流量高峰?
  3. 一次thinkphp框架 success跳转卡顿问题的解决
  4. 在栈中压入一个字符串c语言,面试题 31:栈的压入、弹出序列
  5. 11、Node.js 函数
  6. 蓝桥杯 方格填数(全排列+图形补齐)
  7. [边分治+线段树合并]「CTSC2018」暴力写挂
  8. DataGridView控件的使用 1207
  9. css3层级穿透,css页面滑动穿透的两种解决办法
  10. MOSS中如何自定义WebService
  11. 语音识别如今发展到什么阶段了?
  12. HTTP协议(转自:小坦克博客)
  13. 《MATLAB图像处理375例》——1.3 MATLAB概述
  14. 《软件工程导论》期末复习知识点总结(全)
  15. 【编译原理】简明自底向上分析算法总结:LR(0),SLR,LR(1),LALR分析算法
  16. Android资源,国内镜像站点,博客文章等
  17. 【Java小游戏】两小时制作大鱼吃小鱼小游戏项目
  18. 在一个循环链队中只有尾指针(记为rear,结点结构为数据域data,指针域next),请给出这种队列的入队和出队操作的实现过程。
  19. 自己DIY一个pinephone——debian与主线linux在红米2(msm8916)上的移植 (二)
  20. Cobbler 3.x 部署实战

热门文章

  1. window.open 不显示地址栏_谷歌浏览器Chrome显示「由贵单位管理」怎么解决?非阿里...
  2. django-auth组件
  3. 当年的程序员,如今已是父母,七个方法让孩子爱上学习!
  4. 【转】oracle sequence
  5. iphone开发学习,UIAlertView的简单改写,popAlertView
  6. C–gcc命令行下的参数
  7. jquery笔记(常用技术)
  8. element -ui 表单验证 如果 需要验证的v-model 是对象中的对象 总是提示没有填写....
  9. 代码规范:在Keil5中使用代码格式化工具Astyle(插件)
  10. Thread pool引起的程序连接数据库响应慢