大家可能可能会面临这个问题:
成堆的科学实验数据需要导入 Excel 进行分析
成堆的销售数据表格等待统计
成堆的商品数据等待分析
作为人生苦短的 Python 程序员,该如何优雅地操作 Excel?其实Python提供的操作Excel的库有7个之多,到底哪个更好使用更加方便呢?
首先让我们来整体把握下不同库的特点:
xlrd是一个从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件。官方文档:http://xlrd.readthedocs.io/en/latest/
xlwt是一个用于将数据和格式化信息写入旧Excel文件的库(如.xls)。官方文档:https://xlwt.readthedocs.io/en/latest/
xlutils是一个处理Excel文件的库,依赖于xlrd和xlwt。它仅支持.xls文件的操作。官方文档:http://xlutils.readthedocs.io/en/latest/
xlwings 简单强大,使用方便,可替代VBA。xlwings可以支持.xls读,支持.xlsx文件读写。官方文档:http://docs.xlwings.org/en/stable/index.html
XlsxWriter 是一个用来写 .xlsx 文件格式的模块,但不能用来读取和修改 Excel 文件。官方文档:https://xlsxwriter.readthedocs.io/
openpyxl是一个用于读取和编写Excel 2010 xlsx/xlsm/xltx/xltm文件的库。官方文档:https://openpyxl.readthedocs.io/en/stable/
pandas是一个进行数据处理和分析的强大模块,有时也可以用来自动化处理Excel,官方文档:http://pandas.pydata.org/
另外还有win32com,通过名字大家就知道离不开windows系统,该库存在于pywin32中,是一个读写和处理Excel文件的库。但是我的电脑是Mac,就不做展开了。
官方文档:http://pythonexcels.com/python-excel-mini-cookbook/
DataNitro呢?严格来说它是一个Excel 的插件,安装也需单独到官网下载。也是仅支持windows系统。
官方文档:https://datanitro.com/
具体内容大家也可以参看:http://www.python-excel.org
环境安装
安装
7个模块均为非标准库,因此都需要在命令行中 pip/pip3
进行安装
pip/pip3 install xlrd
pip/pip3 install xlwt
pip/pip3 install xlutils
pip/pip3 install xlwings
pip/pip3 install XlsxWriter
pip/pip3 install openpyxl
pip/pip3 install pandas
提示:
-
xlutils 仅支持 xls 文件,即2003以下版本;
-
xlwings 安装成功后,如果运行提示报错“ImportError: no module named win32api”,请再安装 pypiwin32 或者 pywin32 包;
模块导入
模块的导入跟以往导入其他模块一样,使用import进行导入,如果名字比较长还可以使用as起个别名。
import xlrd
import xlwt
import xlwings as xw
import xlsxwriter
import openpyxl
import pandas as pd
xlutils 模块是 xlrd和 xlwt之间的桥梁,最核心的作用是拷贝一份通过 xlrd
读取到内存中的 .xls
对象,然后再拷贝对象上通过 xlwt
修改 .xls
表格的内容。xlutils
可以将 xlrd
的 Book 对象复制转换为xlwt 的Workbook 对象。
具体使用时通常导入的是模块中的copy子模块:
xluimport xlutils.copy
文档操作
由于设计模式的不同,导致基本的新建文件、修改文件、保存文件等功能在不同的库中存在着一定差异,比如xlsxwriter并不支持打开或修改现有文件,xlwings不支持对新建文件的命名等等,但是分析发现xlwings和openpyxl是对excel操作支持最多的两个库。
特别要说明一下xlutils库,xlrd
、xlwt
、xlutils
各自的功能都有局限性,但三者互为补充,覆盖了Excel文件尤其是 .xls
文件的操作。xlwt
可以生成 .xls
文件,xlrd
可以读取已经存在的 .xls
文件,xlutils
连接 xlrd
和 xlwt
两个模块,使用户可以同时读写一个 .xls
文件。简单来说,xlrd
负责读、xlwt
负责写、xlutils
负责提供辅助和衔接
性能对比
对几个库做了最基本的写入和读取测试,分别使用不同库进行添加及读取 5000行 * 800列 数据操作,得到所用时间,重复操作取平均值。另外在不同的电脑配置,不同的环境下结果肯定会有出入,数据仅供参考。
openpyxl虽然操作Excel的功能强大,但读写性能过于糟糕,尤其是写大表时,会占用大量内存,开启read_only和write_only模式后对其性能有大幅提升,尤其是对读的性能提升很大,使其几乎不耗时。
pandas把Excel当作数据读写的容器,为其强大的数据分析服务,因此读写性能表现中规中矩,但其对Excel文件兼容性是最好的,支持读写.xls,.xlsx文件,且支持只读表中单一工作页。
同样支持此功能的库还有xlrd,但xlrd只支持读,并不支持写,且性能不突出,需要配合xlutils进行Excel操作。
xlsxwriter功能单一,一般用来创建.xlsx文件,写入性能中庸。
综合考虑,xlwings的表现最佳,正如其名,xlwings——Make Excel Fly!
通过以上分析,相信大家对几个库都有了简单的了解。你可根据自己的需求和生产环境,选择合适的 Python-Excel 模块
附上一部分常用代码:
xlwings基本代码
import xlwings as xw
#连接到excel
workbook = xw.Book('你的excel文件的路径')#连接excel文件
#连接到指定单元格
data_range = workbook.sheets('Sheet1').range('A1')
#写入数据
data_range.value = ['a','b','c']
#保存
workbook.save()
xlsxwriter基本代码
import xlsxwriter as xw
#新建excel
workbook = xw.Workbook('你的excel文件的路径')
#新建工作薄
worksheet = workbook.add_worksheet()
#写入数据
worksheet.wirte('A1','a')
#关闭保存
workbook.close()
xlutils基本代码
import xlrd #读取数据
import xlwt #写入数据
import xlutils.copy #操作excel
# 通过xlrd读取数据
#打开excel文件
workbook = xlrd.open_workbook('你的excel文件的路径')
#获取表单
worksheet = workbook.sheet_by_index(0)
#读取数据
data = worksheet.cell_value(0,0)
# 通过xlwt写入数据
#新建excel
wb = xlwt.Workbook()
#添加工作薄
sh = wb.add_sheet('Sheet1')
#写入数据
sh.write(0,0,'abc')
#保存文件
wb.save('myexcel.xls')
#打开excel文件
book = xlrd.open_workbook('你的excel文件的路径')
#复制一份
new_book = copy(book)
#拿到工作薄
worksheet = new_book.getsheet(0)
#写入数据
worksheet.write(0,0,'mydata')
#保存
new_book.save()
openpyxl基本代码
import openpyxl
# 新建文件
workbook = openpyxl.Workbook()
# 写入文件
sheet = workbook.activesheet['A1']='A1'
# 保存文件
workbook.save('你的excel保存路径')
本文目的并不是要评出一个最好的库,仅是从不同角度对不同库进行对比,希望能够让大家了解各个库所擅长的工作。
只有充分了解不同工具的特点,才能够在不同的场景下灵活运用不同的方法来高效解决问题!