Python实现读、写、改Excel文件的常见方式及其应用场景对比
Excel表格类型
当前,Excel文件主要有如下两种格式:
- .xls格式,主要应用于Excel 2003及以下版本。
- .xlsx格式,主要应用于Excel 2007及以上版本。
读取Excel
xlrd
- xlrd 2.0 版本及以上只支持xls格式读取,xlrd 2.0版本以下同时支持xls格式、xlsx格式读取。因此,如果需要用该库读取xlsx格式的文件时,必须控制在xlrd 2.0 版本以下。
- 该库读取Excel方式类似于读取数组的方式,读取速度较快。
- 侧重对Excel的精细化读取,可以精细到单元格的层级,适用性强。
- xlrd最大支持读取1048574行的数据(不分xlsx还是xls格式),耗时63秒左右。
openpyxl
- 仅支持xlsx格式,不支持xls格式。
- 利用sheet.cell(row, column)定位单元格较慢,普通模式读取数据较慢。
- 如果用该库读取Excel数据且对读取速度要求高,可将读取模式设置成只读模式,如下:
load_workbook(path, read_only=True)
pandas
- 需依赖于xlrd库或openpyxl库。pandas读取Excel文件的时候底层会根据Excel文件的后缀名分别调用xlrd库或者openpyxl库来实现读取数据。
- pandas的read_excel()读取,耗时巨大,而且不适合作为调试工具。
写入Excel
xlwt
- 写入Excel文件的先驱,特性稳定成熟,但只支持xls格式。
- 单个sheet最大写入行数是65535行,最大列数是256列。
- 单次最大保存数据量为32767个字符。
xlsxwriter
- 功能丰富,支持图片/表格/图表/筛选/格式/公式等。
- 支持xlsx、xls格式,但保存为xls格式后打开时有告警信息。
- 适合写入超大文件(百万级别),速度快,写入200万数据耗时160秒左右,占用内存空间较小。
openpyxl
- 只支持xlsx格式,且最大行数达到1048576行。
- 简单易用,功能丰富,如单元格格式/图片/表格/公式/筛选/批注/文件保护。
pandas
依赖于xlwt库或openpyxl库。写入xlsx后缀的excel文件时底层需调用openpyxl库,写入xls后缀的Excel文件时底层需调用xlwt库。
修改Excel
修改Excel文件的常用库主要包含xlutils、openpyxl。当前,python中涉及Excel修改操作的库基本上都不支持“原地编辑与保存”,而当前修改Excel文件的方式实际上是一种将原文件“另存为”的方式,且指定保存到原文件的话,原Excel文件会被覆盖掉,如xlutils、openpyxl均如此。
以xlutils为例,一般只用到copy模块,需要从xlutils模块导入copy,用于修改另存为Excel文件。具体实现步骤如下:
首先,将需要更改的Excel文件打开,用xlutils包的copy模块将Excel文件拷贝一份,然后进行修改操作,最后保存与原Excel文件相同的文件路径和文件名,达到修改Excel的目的。
另外,不建议针对大规模的Excel文件直接进行修改,否则会容易出现要保存的对象数目超过限定范围进而导致无法保存现象。针对大规模Excel文件的修改,可通过“读改分离”的方式实现,即通过xlrd、openpyxl等库高效的读取excel数据,然后将刚刚读取的数据替换成需要的修改内容后,重新利用xlsxwriter、xlwt、openpyxl等库高效的写入excel文件中来达到修改Excel的目的。
应用场景
不同的Excel库各有所长,实际开发过程中可根据自己的需求和生产环境,选择合适的 Excel 库进行读写操作,如下:
- 如果数据量不大,对Excel格式无要求,追求稳定性,可以使用xlwt + xlrd组合。
- 如果想要在Excel中完成图片/表格/图表/筛选/格式/公式等丰富功能操作,可选用openpyxl或xlsxwriter。
- 如果需要进行科学计算,处理大量数据,可使用 pandas + xlsxwriter 或者 pandas+openpyxl。
- 如果对读、写、改Excel要求只能用一种模块,可考虑openpyxl、pandas。
- 如果想在Excel中直接运行脚本(如Python脚本),同时对VBA有一定基础,可考虑 xlwings 或 DataNitro。
- 如果对功能和性能都要求极高,且掌握windows 编程经验,可考虑win32com。
安装Excel库
为了实现利用Python语言来对Excel进行读写改操作,因此,必须将对应excel库安装在Python库目录中,方便直接调用。除了使用常见的pip命令安装Excel外,本文介绍一种可以指定版本号的手动安装方式,以安装XlsxWriter、xlrd、xlutils库为例,先在https://pypi.org/search/官网搜索对应的XlsxWriter、xlrd、xlutils安装包,然后将刚下载的安装包上传到/usr/local/python3/lib目录下,分别进行解压操作,最后进入各自解压后的文件夹执行安装脚本,如下:
XlsxWriter安装:
tar -zxvf XlsxWriter-3.0.2.tar.gz
cd XlsxWriter-3.0.2
python3 setup.py install
xlrd安装:
tar -zxvf xlrd-1.2.0.tar.gz
cd xlrd-1.2.0
python3 setup.py install
xlutils安装:
tar -zxvf xlutils-2.0.0.tar.gz
cd xlutils-2.0.0
python3 setup.py install
Python实现读、写、改Excel文件的常见方式及其应用场景对比相关推荐
- Python使用openpyxl模块读写excel文件
Python使用openpyxl模块读写excel文件 openpyxl是一个用于写入和读取xlsx格式的excel文件的Python模块. excel2010后的后缀名为xlsx,不再是xls,使用 ...
- python实现图书管理系统——通过excel文件或者TXT文件存放数据
用python实现图书管理系统--通过excel文件或者TXT文件存放数据 话不多说,先上图,看看运行起来的效果: 由上图可知,我实现的主要功能: 用户注册 用户登录 添加图书 查询图书 删除图书 修 ...
- mpi4py 并行读/写 numpy npy 文件的方法
本文从本人简书博客同步过来 在上一篇中我们介绍了 mpi4py 中获得高性能 I/O 的方法和建议,下面我们将介绍 mpi4py 并行读/写 numpy npy 文件的方法. 在使用 mpi4py 写 ...
- python 通过openpyxl来操作Excel文件(一 ):读取Excel文件
这篇文章讲python 通过openpyxl来读取Excel文件 不清楚怎么通过openpyxl来写入Excel文件的小伙伴可以看我另一篇文章 传送门python 通过openpyxl来操作Excel ...
- python 通过openpyxl来操作Excel文件(二 ):写入Excel文件
这篇文章讲python 通过openpyxl来写入Excel文件,不清楚python怎么读取Excel文件的小伙伴可以去看下我的另一篇文章 传送门https://blog.csdn.net/i_cof ...
- python导入excel文件-python使用xlrd模块读写Excel文件的方法
本文实例讲述了python使用xlrd模块读写Excel文件的方法.分享给大家供大家参考.具体如下: 一.安装xlrd模块 到python官网下载http://pypi.python.org/pypi ...
- [转载] Python利用openpyxl模块读取excel文件内容
参考链接: Python | 使用openpyxl模块调整Excel文件的行和列 import openpyxl wb = openpyxl.load_workbook('原始数据.xlsx') #读 ...
- python读取20万数据Excel文件+拆分数据
python读取20万数据Excel文件 使用普通的pandas读取Excel,再结合xlrd读取,可能会读取的Excel数据会不全,最多只能读取到65535+行的数,如果读取超大excel数据时就读 ...
- python csv转excel_将Excel文件转为csv文件的python脚本
将Excel文件转为csv文件的python脚本 #!/usr/bin/env python __author__ = "lrtao2010" ''' Excel文件转csv文件脚 ...
最新文章
- Cisco堆叠交换机序号的改变
- 预处理器预处理变量头文件保护条件编译
- OpenCV图像处理使用笔记(二)——图像矩阵的掩膜操作
- 最新综述:推荐系统的Bias问题和Debias方法
- 拦截器---SpringMVC学习笔记(十四)
- python单双三引号区别_python中单引号,双引号,多引号区别_python中单双引号
- java五星好评点评器_亲,麻烦给个五星好评!—RatingBar
- Java 中判断一个字符串是否包含另外一个字符串的方法
- [深度学习-优化]dropout防止过拟合的理解
- 怎么样把c语言和单片机融合,求助怎么把两个单片机c语言程序结合在一起?大一期末实验...
- 洞悉物联网发展1000问之可穿戴设备的未来会怎样?
- 「02」《机器学习经·天工开物篇》
- 小米2 android版本更新,小米MIUI再更新,又有2款手机可以用上基于Android 11的MIUI12...
- java 浏览器脚本_各种浏览器开启JavaScript脚本方法
- flex blazeds java spring_flex3+blazeds+spring+hibernate整合小结
- Unity从Asset Store下载的资源安装包默认的保存位置及其修改
- python步态识别算法_步态识别问题3
- 计算机显示屏显示超出屏幕大小,电脑连接的显示器出错显示超出工作频率范围怎么恢复...
- 企业微信分享小程序功能
- ES 索引mapping之keyword;term查询添加keyword查询;更改mapping keyword类型