python的excel库_Python-Excel 模块哪家强?

0. 前言

从网页爬下来的大量数据需要清洗?

成堆的科学实验数据需要导入 Excel 进行分析?

有成堆的表格等待统计?

作为人生苦短的 Python 程序员,该如何优雅地操作 Excel?

得益于前人的辛勤劳作,Python 处理 Excel 已有很多现成的轮子,使用较多的有:

xlwings

openpyxl

pandas

win32com

xlsxwriter

DataNitro

xlutils

上次我们介绍了下 xlutils,不少读者留言表示有比它更好使的模块,于是我们又把另外几个都体验了一遍。

本文将从运行环境、文档操作、基本功能和性能等方面对以上模块进行一次粗浅的比较,供大家参考。

1. 环境配置

再好的模块,也需要在正确的 Python 版本以及 Excel 版本才可运行。

提醒及注意:xlutils 仅支持 xls 文件,即2003以下版本;

win32com 与 DataNitro 仅支持 windows 系统;

xlwings 安装成功后,如果运行提示报错“ImportError: no module named win32api”,请再安装 pypiwin32 或者 pywin32 包;

win32com 不是独立的扩展库,而是集成在其他库中,安装 pypiwin32 或者 pywin32 包即可使用;

DataNitro 是 Excel 的插件,安装需到官网下载。

2. 文档操作

虽然大家都是操作 Excel,但即使最基本的新建文件、修改文件、保存文件等功能,在不同的库中也存在差异。比如 xlsxwriter 并不支持打开或修改现有文件,xlwings 不支持对新建文件的命名,DataNitro 作为 Excel 插件需依托于软件本身,pandas 新建文档需要依赖其他库等等。

3. 基本功能

由于设计目的不同,每个模块通常着重于某一方面功能,各有所长。

xlwings

可结合 VBA 实现对 Excel 编程,强大的数据输入分析能力,同时拥有丰富的接口,结合 pandas/numpy/matplotlib 轻松应对 Excel 数据处理工作。

openpyxl

简单易用,功能广泛,单元格格式/图片/表格/公式/筛选/批注/文件保护等等功能应有尽有,图表功能是其一大亮点,缺点是对 VBA 支持的不够好。

pandas

数据处理是 pandas 的立身之本,Excel 作为 pandas 输入/输出数据的容器。

win32com

从命名上就可以看出,这是一个处理 windows 应用的扩展,Excel 只是该库能实现的一小部分功能。该库还支持 office 的众多操作。需要注意的是,该库不单独存在,可通过安装 pypiwin32 或者 pywin32 获取。

xlsxwriter

拥有丰富的特性,支持图片/表格/图表/筛选/格式/公式等,功能与openpyxl相似,优点是相比 openpyxl 还支持 VBA 文件导入,迷你图等功能,缺点是不能打开/修改已有文件,意味着使用 xlsxwriter 需要从零开始。

DataNitro

作为插件内嵌到 Excel 中,可完全替代 VBA,在 Excel 中使用 python 脚本。既然被称为 Excel 中的 python,协同其他 python 库亦是小事一桩。然而,这是付费插件...

xlutils

基于 xlrd/xlwt,老牌 python 包,算是该领域的先驱,功能特点中规中矩,比较大的缺点是仅支持 xls 文件。

4.性能

我们对几个库做了最基本的写入和读取测试,分别使用不同库进行添加及读取 1000行 * 700列 数据操作,得到所用时间,重复操作取平均值。另外在不同的电脑配置,不同的环境下结果肯定会有出入,数据仅供参考。

注:xlutils 最多只能写入 256 列,即 1000*256,用时3.8秒,表现不错;

DataNitro 与 xlsxwriter 不能打开 Excel 文件。

5. 小结

通过以上的分析,相信大家对几个库都有了简单的了解。在编写文章的过程中,笔者也在思考各个库最适合的应用场景。不想使用 GUI 而又希望赋予 Excel 更多的功能,openpyxl 与 xlsxwriter,你可二者选其一;

需要进行科学计算,处理大量数据,建议 pandas+xlsxwriter 或者 pandas+openpyxl;

想要写 Excel 脚本,会 Python 但不会 VBA 的同学,可考虑 xlwings 或 DataNitro;

至于 win32com,不管是功能还是性能都很强大,有 windows 编程经验的同学可以使用。不过它相当于是 windows COM 的封装,自身并没有很完善的文档,新手使用起来略有些痛苦。

你可根据自己的需求和生产环境,选择合适的 Python-Excel 模块。

6. 代码示例

最后,附上一些演示代码,大家可自行体会下不同模块的使用。

6.1 xlwings基本代码

import xlwings as xw

#连接到excel

workbook = xw.Book(r'path/myexcel.xlsx')#连接excel文件

#连接到指定单元格

data_range = workbook.sheets('Sheet1').range('A1')

#写入数据

data_range.value = [1,2,3]

#保存

workbook.save()

6.2 xlsxwriter基本代码

import xlsxwriter as xw

#新建excel

workbook = xw.Workbook('myexcel.xlsx')

#新建工作薄

worksheet = workbook.add_worksheet()

#写入数据

worksheet.write('A1',1)

#关闭保存

workbook.close()

6.3 xlutils基本代码import xlrd #读取数据

import xlwt #写入数据

import xlutils #操作excel

#----xlrd库

#打开excel文件

workbook = xlrd.open_workbook('myexcel.xls')

#获取表单

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,'data')

#保存文件

wb.save('myexcel.xls')

#----xlutils库

#打开excel文件

book = xlrd.open_workbook('myexcel.xls')

#复制一份

new_book = xlutils.copy(book)

#拿到工作薄

worksheet = new_book.getsheet(0)

#写入数据

worksheet.write(0,0,'new data')

#保存

new_book.save()

6.4 win32com基本代码

import win32com.client as wc

#启动Excel应用

excel_app = wc.Dispatch('Excel.Application')

#连接excel

workbook = excel_app.Workbooks.Open(r'e:/myexcel.xlsx' )

#写入数据

workbook.Worksheets('Sheet1').Cells(1,1).Value = 'data'

#关闭并保存

workbook.SaveAs('newexcel.xlsx')

excel_app.Application.Quit()

6.5 openpyxl基本代码

import openpyxl

# 新建文件

workbook = openpyxl.Workbook()

# 写入文件

sheet = workbook.activesheet['A1']='data'

# 保存文件

workbook.save('test.xlsx')

6.6 DataNitro基本代码

#单一单元格赋值

Cell('A1').value = 'data'

#单元区域赋值

CellRange('A1:B2').value = 'data'

其他文章及回答:

Crossin的编程教室

微信ID:crossincode

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454542.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html如何设置滑轮效果,HTML中鼠标滚轮事件onmousewheel处理

滚轮事件是不同浏览器会有一点点区别,一个像Firefox使用DOMMouseScroll ,ff也可以使用addEventListener方法绑定DomMouseScroll事件,其他的浏览器滚轮事件使用mousewheel,下面我来给大家具体介绍。Firefox使用DOMMouseScroll,其他…

在OOW2009上寻宝撞大运续(床上篇)

历时5天的Oracle Open World 2009终于,终于结束了。今天最后的节目是去听一场金融分析师的会议,“只”开了不到6个钟。去的时候是毛毛雨,回来的时候终于看到了一缕阳光。说夕阳无限好不大合适。用Larry Ellison的说法是“太阳落下的地方也是太…

skynet记录6:定时器

稍后填坑 kernel中,每一次时钟中断会trap到kernel code,这个时间间隔称之为jiffies,每秒钟发生的次数为HZ 如果是4核,分配到每个核就是HZ/4 cat /boot/config-uname -r | grep ^CONFIG_HZ 输出: CONFIG_HZ250 cat /pro…

html图片平铺不重复整个页面,JSP网页背景图片怎样不平铺,不重复出现啊...

2016-07-10 13:12最佳答案1,Q:怎样把别人网页上的背景音乐保存下来?A:浏览该网页后,在你的 Windows\Temporary Internet Files 文件夹下可以找到该背景音乐的缓存文件,拷贝出来即可使用。如果还是找不见该文件,可以打开网页的源文件,找到音乐…

特征图注意力_从数据结构到算法:图网络方法初探

作者 | 朱梓豪来源 | 机器之心原文 | 从数据结构到算法:图网络方法初探如果说 2019 年机器学习领域什么方向最火,那么必然有图神经网络的一席之地。其实早在很多年前,图神经网络就以图嵌入、图表示学习、网络嵌入等别名呈现出来,其…

FFMPEG 源码分析

FFMPEG基本概念: ffmpeg是一个开源的编解码框架,它提供了一个音视频录制,解码和编码库。FFMPEG是在linux下开发的,但也有windows下的编译版本。 ffmpeg项目由以下几部分组成: ffmpeg 视频文件转换命令行工具,也支持经过实时电视…

面试之 Redis汇总

简介 Redis 持久化机制 RDB(Redis DataBase) AOF(Append-only file) Redis 4.0 对于持久化机制的优化 补充:AOF 重写 二者的区别 二者优缺点 Memcache与Redis的区别都有哪些? 缓存雪崩、缓存穿透、…

Oracle 10g 问题集锦

监听服务中Oracle数据库之中使用最主要的一个服务,但是这个服务经常会出现错误,包括以后在工作之中此服务也会出现错误,故给出两种常见错误的解决方案(故障1、故障2) 故障1: 注册表使用了优化软件(如&#…

iOS linker command failed with exit code 1 (use -v to see invocation)多种解决方案汇总

有时可能会遇到这种错误,关键是这种错误,有时只有这一句话,也不会给更多错误信息。 网上找了一些,总结了如下:(PS:以下是按照解决简易程度排序,不代表出现概率) 1、bitco…

计算机二级python选择题题库_2018年计算机二级python题库精编(1)

1正则中的^符号,用在一对中括号中则表示要匹配() A.字符串的开始 B.除中括号内的其它字符 C.字符串的结束 D.仅中括号内含有的字符 2静态成员变量称为类变量,非静态成员变量称为实例变量,下列关于一个类的静态成员的描述中,不正确…

非常好用!世界上最快最好的视频压缩转换工具(精品)

测试了20多款 各种视频压缩 截取软件 真的是这款最快 快好用 效果也好!!! 最快的视频转换压缩工具。 WisMencoder 能够把您的电脑上的所有视频格式,包括avi,mpg,rmvb,wmv,mp4,mov,dat等格式以最快的速度和最高的质量转换为…

面试之 Mysql 汇总

事务相关 什么是事务? 事务:是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务。事务的ACID属性: (1)原子性(Atomicity):   事务是一…

Exchange Server 2003 部署手册

1. 环境需求服务器: 域控制器1台; Exchange Server服务器1台。 IP和机器名配置: 域控制器:机器名:dc IP: 10.10.10.200 掩码:255.255.255.0 网关:10.10.10.254 DNS:127.0.0.1 Exchange&#xff…

app中 html5 search 事件,事件 - Cordova中文网

事件Cordova给我们提供了很多的事件,可以在应用程序中使用。应用程序代码中可以添加这些事件的监听。例如:HTML文件Device Ready ExampleJS文件// example.js文件// 等待设备API库加载好//function onLoad() {document.addEventListener("deviceready", o…

python标准库os中的方法_python中OS常用方法

下面列出了一些在os模块中比较有用的部分。它们中的大多数都简单明了。 os.sep可以取代操作系统特定的路径分隔符。windows下为 “\\” os.name字符串指示你正在使用的平台。比如对于Windows,它是nt,而对于Linux/Unix用户,它是posix。 os.get…

ffmpeg 过程分析

简介 FFmpeg是一个集录制、转换、音/视频编码解码功能为一体的完整的开源解决方案。FFmpeg的开发是基于Linux操作系统,但是可以在大多数操作系统中编译和使用。FFmpeg支持MPEG、DivX、MPEG4、AC3、DV、FLV等40多种编码,AVI、MPEG、OGG、Matroska、ASF等…

面试之 Python 基础

1:为什么学习Python 家里有在这个IT圈子里面,也想让我接触这个圈子,然后给我建议学的Python,然后自己通过百度和向有学过Python的同学了解了Python,Python这门语言,入门比较简单,它简单易学&…

学习笔记(11月08日)--异常

四周三次课(11月8日)异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。一般情况下,在Python无法正常处理程序时就会发生一个异常。异常是Python对象,表示一个错误。当Python脚本发生异…

html浏览器的区别是什么意思,不同浏览器对css的识别有区别吗?

不同浏览器对css的识别是有区别,因此针对不同的浏览器去写不同的CSS。下面本篇文章给大家介绍一些常用CSS书写技巧(不同浏览器之间的差异)。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。不同的浏览器,比如Int…

关于python

你是如何自学 Python 的? https://www.zhihu.com/question/20702054 Python 的练手项目有哪些值得推荐?https://www.zhihu.com/question/29372574 Python编码规范 -- Python Style Guide http://www.cnblogs.com/lxw0109/p/Python-Style-Guide.htm…