常见库简介

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文件的库。小编整理一套Python资料和PDF,有需要Python学习资料可以加学习群:631441315 ,反正闲着也是闲着呢,不如学点东西啦~~
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. 注1.xlwt和pandas每个工作页最多写入256列,因此测试用例修改为每页有2000行256列的整数.
  2. 注2.xlutils读写依赖于xlrd和xlwt,不单独测试。
  3. 注3.openpyxl测试两种模式,一是普通加载写入,二是read_only/write_only模式下的加载写入。
  4. 注4.DataNitro要收费,且需依托Excel使用,本次不测试。

读写性能比较

  1. 单从读写的性能上考虑,win32com的性能是最好的,xlwings其次。
  2. 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()

Python读写Excel文件第三方库汇总,你想要的都在这儿!的更多相关文章

  1. Python读写Excel文件和正则表达式

    Python 读写Excel文件 这里使用的是 xlwt 和 xlrd 这两个excel读写库. #_*_ coding:utf-8 _*_ #__author__='观海云不远' #__date__ ...

  2. [转]用Python读写Excel文件

    [转]用Python读写Excel文件   转自:http://www.gocalf.com/blog/python-read-write-excel.html#xlrd-xlwt 虽然天天跟数据打交 ...

  3. python读写Excel文件的函数--使用xlrd/xlwt

    python中读取Excel的模块或者说工具有很多,如以下几种: Packages 文档下载 说明 openpyxl Download | Documentation | Bitbucket  The ...

  4. Python读写EXCEL文件常用方法大全

    前言 python读写excel的方式有很多,不同的模块在读写的讲法上稍有区别,这里我主要介绍几个常用的方式. 用xlrd和xlwt进行excel读写: 用openpyxl进行excel读写: 用pa ...

  5. 用Python读写Excel文件(转)

    原文:google.com/ncr 虽然天天跟数据打交道,也频繁地使用Excel进行一些简单的数据处理和展示,但长期以来总是小心地避免用Python直接读写Excel文件.通常我都是把数据保存为以TA ...

  6. 用Python读写Excel文件的方式比较

    虽然天天跟数据打交道,也频繁地使用Excel进行一些简单的数据处理和展示,但长期以来总是小心地避免用Python直接读写Excel文件.通常我都是把数据保存为以TAB分割的文本文件(TSV),再在Ex ...

  7. python 读写 Excel文件

    最近用python处理一个小项目,其中涉及到对excel的读写操作,通过查资料及实践做了一下总结,以便以后用. python读写excel文件要用到两个库:xlrd和xlwt,首先下载安装这两个库. ...

  8. python读写Excel文件(xlrd、xlwr)

    一.首先需要安装第三方库:pip install xlrd 1.打开Excel文件,由于写入时需要copy,所以这里加上保留原格式参数:formatting_info=True excel_file ...

  9. python读写Excel文件--使用xlrd模块读取,xlwt模块写入

    一.安装xlrd模块和xlwt模块 1. 下载xlrd模块和xlwt模块 到python官网http://pypi.python.org/pypi/xlrd下载模块.下载的文件例如:xlrd-0.9. ...

  10. Python读写Excel文件的实例

    最近由于经常要用到Excel,需要根据Excel表格中的内容对一些apk进行处理,手动处理很麻烦,于是决定写脚本来处理.首先贴出网上找来的读写Excel的脚本. 1.读取Excel(需要安装xlrd) ...

随机推荐

  1. 2347. 最好的扑克手牌 (Easy)

    问题描述 2347. 最好的扑克手牌 (Easy) 给你一个整数数组 ranks 和一个字符数组 suit .你有 5 张扑克牌,第 i 张牌大小为 ranks[i] ,花色为 suits[i] . ...

  2. vue dialog弹窗

    <el-dialog v-model="dialogFormVisible" :before-close="closeDialog" title=&quo ...

  3. 第六章 mysql日志

    第六章 mysql日志 一 错误日志 错误日志的默认存放路径是 mysql 存放数据的地方  hostname.err 1. 修改错误日志存放路径 [mysqld] log-error=/data/m ...

  4. Typora中的emoji表情

    People  :smile:  :laughing:  :tired_face:  :blush:  :smiley: ️ :relaxed:  :smirk:  :heart_eyes:  :ki ...

  5. Django基础篇 07-Django后端和html交互

    一.上下文管理器 context_processors 执行顺序是 先执行views.py中代码,在views返回之前在走到TEMPLATES.OPTIONS.context_processors的方 ...

  6. 一个基于线程池和epoll的IO事件管理器

    前面几篇博客介绍了Epoll, ThreadPool, 其中 Epoll 封装了epoll的各类api, 可在epoll句柄中添加/修改/删除 fd 的 各类事件(EPOLLIN | EPOLLOUT ...

  7. 使用类的习题(c++ prime plus)

    第一题 vect.h: #ifndef VECTOR_H_ #define VECTOR_H_ #include <iostream> namespace VECTOR { class V ...

  8. element-ui跨行

    1 <template> 2 <el-table :data="scheduleList" :span-method="objectSpanMethod ...

  9. Spring系列之面向切面编程-15

    目录 AOP 概念 AOP 代理 @AspectJ 支持 启用@AspectJ 支持 使用 Java 配置启用 @AspectJ 支持 通过 XML 配置启用 @AspectJ 支持 声明一个方面 声 ...

  10. input设置自定义属性,并获取值。

    HTML代码: JavaScript代码: 因为busCode不是input标签原生的属性,所以不能使用"点"操作. 非标准属性,要用:obj.getAttribute(" ...