Python 操作 Excel

之前看过一篇文章,说一个工作多年的老员工,处理数据时只会用复制粘贴到 Excel ,天天加班工作还完不成,后来公司就招了一个会 Python 的新人,结果分分钟就处理完成。所以工作中大家经常会使用 Excel 去处理以及展示数据,但是对于部分工作我们可以借助程序帮忙实现,达到高效解决问题的效果,今天就为大家介绍一下,使用 Python 如何操作 Excel 。

常用工具

数据处理是 Python 的一大应用场景,而 Excel 又是当前最流行的数据处理软件。因此用 Python 进行数据处理时,很容易会和 Excel 打起交道。得益于前人的辛勤劳作,Python 处理 Excel 已有很多现成的轮子,比如 xlrd & xlwt & xlutils 、 XlsxWriter 、 OpenPyXL ,而在 Windows 平台上可以直接调用 Microsoft Excel 的开放接口,这些都是比较常用的工具,还有其他一些优秀的工具这里就不一一介绍,接下来我们通过一个表格展示各工具之间的特点:

类型xlrd&xlwt&xlutilsXlsxWriterOpenPyXLExcel开放接口
读取支持不支持支持支持
写入支持支持支持支持
修改支持不支持支持支持
xls支持不支持不支持支持
xlsx高版本支持支持支持支持
大文件不支持支持支持不支持
效率超慢
功能较弱强大一般超强大

以上可以根据需求不同,选择合适的工具,现在为大家主要介绍下最常用的 xlrd & xlwt & xlutils 系列工具的使用。

xlrd & xlwt & xlutils 介绍

xlrd&xlwt&xlutils 顾明思意是由以下三个库组成:

  • xlrd:用于读取 Excel 文件;

  • xlwt:用于写入 Excel 文件;

  • xlutils:用于操作 Excel 文件的实用工具,比如复制、分割、筛选等;

安装库

安装比较简单,直接用 pip 工具安装三个库即可,安装命令如下:

$ pip3 install xlrd xlwt xlutils

安装完成提示 Successfully installed xlrd-1.2.0 xlutils-2.0.0 xlwt-1.3.0 即表示安装成功。

写入 Excel

接下来我们就从写入 Excel 开始,话不多说直接看代码如下:

# excel_w.py# 导入 xlwt 库import xlwt# 创建 xls 文件对象wb = xlwt.Workbook()# 新增两个表单页sh1 = wb.add_sheet('成绩')sh2 = wb.add_sheet('汇总')# 然后按照位置来添加数据,第一个参数是行,第二个参数是列# 写入第一个sheetsh1.write(0, 0, '姓名')sh1.write(0, 1, '成绩')sh1.write(1, 0, '张三')sh1.write(1, 1, 88)sh1.write(2, 0, '李四')sh1.write(2, 1, 99.5)# 写入第二个sheetsh2.write(0, 0, '总分')sh2.write(1, 0, 187.5)# 最后保存文件即可wb.save('test_w.xls')

然后执行命令 python excel_w.py 运行代码,结果会看到生成名为 test_w.xls 的 Excel 文件,打开文件查看如下图所示

图片

图片

以上就是写入 Excel 的代码,是不是很简单,下面我们再来看下读取 Excel 该如何操作。

读取 Excel

读取 Excel 其实也不难,请看如下代码:

# excel_r.py
# 导入 xlrd 库import xlrd# 打开刚才我们写入的 test_w.xls 文件wb = xlrd.open_workbook("test_w.xls")# 获取并打印 sheet 数量print( "sheet 数量:", wb.nsheets)# 获取并打印 sheet 名称print( "sheet 名称:", wb.sheet_names())# 根据 sheet 索引获取内容sh1 = wb.sheet_by_index(0)# 或者# 也可根据 sheet 名称获取内容# sh = wb.sheet_by_name('成绩')# 获取并打印该 sheet 行数和列数print( u"sheet %s 共 %d 行 %d 列" % (sh1.name, sh1.nrows, sh1.ncols))# 获取并打印某个单元格的值print( "第一行第二列的值为:", sh1.cell_value(0, 1))# 获取整行或整列的值rows = sh1.row_values(0) # 获取第一行内容cols = sh1.col_values(1) # 获取第二列内容# 打印获取的行列值print( "第一行的值为:", rows)print( "第二列的值为:", cols)# 获取单元格内容的数据类型print( "第二行第一列的值类型为:", sh1.cell(1, 0).ctype)# 遍历所有表单内容for sh in wb.sheets():    for r in range(sh.nrows):        # 输出指定行        print( sh.row(r))

我已经把每行代码都加了注释,应该可以很容易理解,接下来执行命令 python excel_r.py ,输出如下结果:​​​​​​​

$ python excel_r.pysheet 数量: 2sheet 名称: ['成绩', '汇总']sheet 成绩 共 3 行 2 列第一行第二列的值为: 成绩第一行的值为: ['姓名', '成绩']第二列的值为: ['成绩', 88.0, 99.5]第二行第一列的值为: 1[text:'姓名', text:'成绩'][text:'张三', number:88.0][text:'李四', number:99.5][text:'总分'][number:187.5]

细心的朋友可能注意到,这里我们可以获取到单元格的类型,上面我们读取类型时获取的是数字1,那1表示什么类型,又都有什么类型呢?别急下面我们通过一个表格展示下:

数值类型说明
0empty
1string字符串
2number数字
3date日期
4boolean布尔值
5error错误

通过上面表格,我们可以知道刚获取单元格类型返回的数字1对应的就是字符串类型。

修改 excel

上面说了写入和读取 Excel 内容,接下来我们就说下更新修改 Excel 该如何操作,修改时就需要用到 xlutils 中的方法了。直接上代码,来看下最简单的修改操作:​​​​​​​

# excel_u.py# 导入相应模块import xlrdfrom xlutils.copy import copy# 打开 excel 文件readbook = xlrd.open_workbook("test_w.xls")# 复制一份wb = copy(readbook)# 选取第一个表单sh1 = wb.get_sheet(0)# 在第四行新增写入数据sh1.write(3, 0, '王亮')sh1.write(3, 1, 59)# 选取第二个表单sh1 = wb.get_sheet(1)# 替换总成绩数据sh1.write(1, 0, 246.5)# 保存wb.save('test_w1.xls')

从上面代码可以看出,这里的修改 Excel 是通过 xlutils 库的 copy 方法将原来的 Excel 整个复制一份,然后再做修改操作,最后再保存。现在我们执行以下命令 python excel_u.py 看下修改结果如下:

图片

图片

格式转换操作

在平时我们使用 Excel 时会对数据进行一下格式化,或者样式设置,在这里把上面介绍写入的代码简单修改下,使输出的格式稍微改变一下,代码如下:​​​​​​​

# excel_w2.py# 导入 xlwt 库import xlwt# 设置写出格式字体红色加粗styleBR = xlwt.easyxf('font: name Times New Roman, color-index red, bold on')# 设置数字型格式为小数点后保留两位styleNum = xlwt.easyxf(num_format_str='#,##0.00')# 设置日期型格式显示为YYYY-MM-DDstyleDate = xlwt.easyxf(num_format_str='YYYY-MM-DD')# 创建 xls 文件对象wb = xlwt.Workbook()# 新增两个表单页sh1 = wb.add_sheet('成绩')sh2 = wb.add_sheet('汇总')# 然后按照位置来添加数据,第一个参数是行,第二个参数是列sh1.write(0, 0, '姓名', styleBR)   # 设置表头字体为红色加粗sh1.write(0, 1, '日期', styleBR)   # 设置表头字体为红色加粗sh1.write(0, 2, '成绩', styleBR)   # 设置表头字体为红色加粗# 插入数据sh1.write(1, 0, '张三',)sh1.write(1, 1, '2019-01-01', styleDate)sh1.write(1, 2, 88, styleNum)sh1.write(2, 0, '李四')sh1.write(2, 1, '2019-02-02')sh1.write(2, 2, 99.5, styleNum)# 设置单元格内容居中的格式alignment = xlwt.Alignment()alignment.horz = xlwt.Alignment.HORZ_CENTERstyle = xlwt.XFStyle()style.alignment = alignment# 合并A4,B4单元格,并将内容设置为居中sh1.write_merge(3, 3, 0, 1, '总分', style)# 通过公式,计算C2+C3单元格的和sh1.write(3, 2, xlwt.Formula("C2+C3"))# 对 sheet2 写入数据sh2.write(0, 0, '总分', styleBR)sh2.write(1, 0, 187.5)# 最后保存文件即可wb.save('test_w3.xls')

然后我们执行命令 python excel_w2.py 运行以上代码,来输出文件 test_w3.xls ,我们来看看效果怎么样。

图片

可以看出,使用代码我们可以对字体,颜色、对齐、合并等平时 Excel 的操作进行设置,也可以格式化日期和数字类型的数据。当然了这里我们只是介绍了部分功能,不过这已经足够我们日常使用了,想了解更多功能操作可以参考文末官网。

总结

本文为大家介绍了 Python 中如何操作 Excel 的常用类库,并详细介绍了下 xlrd & xlwt & xlutils 系列工具的使用,总体来看操作并不复杂,不过它对 xlsx 支持比较差,对修改其实支持也不太好,而且功能并不多,不过在 xls 操作中还是占有重要地位的,之后会为大家介绍其他常用 Excel 操作工具。

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

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

相关文章

C# WPF 自己写的一个模拟病毒传播的程序,有可视化

源代码: https://github.com/t39q/VirusSpread 主要代码 using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks;namespace VirusSpread.Bu…

C/C++苹果和虫子 2019年9月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C苹果和虫子 一、题目要求 1、编程实现 2、输入输出 二、解题思路 1、案例分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 C/C苹果和虫子 2019年9月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 你买了一箱n个苹果,很不幸…

Android Automotive编译

系统准备 安装系统 准备一台安装Ubuntu系统的机器(windows系统的机器可以通过WSL安装ubuntu系统) 安装docker 本文使用docker进行编译,因此提前安装docker。参考网络链接安装docker并设置为不使用sudo进行docker操作。 参考链接&#xff…

分类算法系列④:朴素贝叶斯算法

目录 1、贝叶斯算法 2、朴素贝叶斯算法 3、先验概率和后验概率 4、⭐机器学习中的贝叶斯公式 5、文章分类中的贝叶斯 6、拉普拉斯平滑系数 6.1、介绍 6.2、公式 7、API 8、示例 8.1、分析 8.2、代码 8.3、⭐预测流程分析 🍃作者介绍:准大三…

Top 15 开源3D分子蛋白质建模与渲染软件

如今,WebGL 是一种趋势技术,因为它允许开发人员使用现代浏览器作为客户端来创建复杂的 3D 交互式图形、游戏,而无需安装额外的插件、扩展或软件。 WebGL允许浏览器直接与GPU(图形处理单元)一起工作。 推荐:…

HJ48 从单向链表中删除指定值的节点

Powered by:NEFU AB-IN Link 文章目录 HJ48 从单向链表中删除指定值的节点题意思路代码 HJ48 从单向链表中删除指定值的节点 题意 输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。 思路 单向链表…

Java——》线程间是如何通信的

推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

企业架构LNMP学习笔记14

默认官方模块: Gzip压缩: 压缩文件,使文件变小了,传输更快了,目前大部分市场浏览器都支持Gzip。 传输的时候省流量。 目的是为了提高用户的加载速度。 #开启gzip压缩 gzip on; #http协议版本 gzip_http_version 1.0…

Java网络编程(二)Socket 套接字(TCP和UDP),以及TCP的回显

Socket 套接字 我们软件工作者,着重编写的是应用层的代码,但是发送这个数据,我们就需要将应用层传输到传输层,也就意味着我们需要调用应用层的API,统称为 Socket API。 套接字的分类: 流套接字&#xff…

百望云亮相服贸会 重磅发布业财税融Copilot

小望小望,我要一杯拿铁! 好的,已下单成功,请问要开具发票嘛? 在获得确认的指令后, 百小望AI智能助手 按用户要求成功开具了一张电子发票! 这是2023年服贸会国家会议中心成果发布现场&#x…

搭建hadoop集群的常见问题及解决办法

问题一: namenode -format重复初始化 出现问题的原因是重复初始化时会重新生成集群ID,而dn还是原先的集群ID,两者不匹配时无法启动相应的dn进程。 怎么查找问题原因:在logs目录下找到对应节点的.log文件,使用tail -200 文件名来查…

2023国赛C题解题思路代码及图表:蔬菜类商品的自动定价与补货决策

2023国赛C题:蔬菜类商品的自动定价与补货决策 C题表面上看上去似乎很简单,实际上23题非常的难,编程难度非常的大,第二题它是一个典型的动态规划加仿真题目,我们首先要计算出销量与销售价格,批发价格之间的…

视频集中存储/直播点播平台EasyDSS点播文件分类功能新升级

视频推拉流EasyDSS视频直播点播平台,集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体,可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务。 TSINGSEE青犀视频的EasyDSS平台具有点播文件分类展示方法&#xf…

单例模式(饿汉式单例 VS 懒汉式单例)

所谓的单例模式就是保证某个类在程序中只有一个对象 一、如何控制只产生一个对象? 1.构造方法私有化(保证对象的产生个数) 创建类的对象,要通过构造方法产生对象 构造方法若是public权限,对于类的外部,可…

JAR will be empty - no content was marked for inclusion!

现象 在对自建pom依赖组件打包时&#xff0c;出现JAR will be empty - no content was marked for inclusion!错误。 方案 在pom中怎么加packaging标签内容为pom&#xff0c;标识只打包pom文件 <?xml version"1.0" encoding"UTF-8"?> ...<grou…

基于VUE3+Layui从头搭建通用后台管理系统(前端篇)十二:通用详情组件封装实现

一、本章内容 本章实现通用详情组件,自动识别实体配置信息,并自动生成对应组件,填充组件数据,并完成数据自动加载等过程。 1. 详细课程地址: 待发布 2. 源码下载地址: 待发布 二、界面预览 三、开发视频 3.1 B站视频地址࿱

ARM指令集

CPU是计算机的中央处理器&#xff0c;负责执行组成计算机程序的指令。为此&#xff0c;CPU必须能够解释机器码即计算机程序的最低级别表示形式&#xff0c;以让CPU可以直接执行。机器码是一系列的二进制指令&#xff0c;每个指令都代表CPU可以执行的特定操作。指令由一系列1和0…

操作系统 --- 计算机系统引论

&#xff08;一&#xff09;操作系统的目的和作用 概念&#xff08;定义&#xff09; 操作系统 &#xff08; Operating System &#xff0c; OS &#xff09;是指控制和 管理 整个计算机系统的 硬件和软件 资源&#xff0c;并合理地组织调度计算机的工作和资源的分配&#…

数据分析面试题(2023.09.08)

数据分析流程 总体分为四层&#xff1a;需求层、数据层、分析层和结论层 一、统计学问题 1、贝叶斯公式复述并解释应用场景 公式&#xff1a;P(A|B) P(B|A)*P(A) / P(B)应用场景&#xff1a;如搜索query纠错&#xff0c;设A为正确的词&#xff0c;B为输入的词&#xff0c;那…

vue-elementPlus自动按需导入和主题定制

elementPlus自动按需导入 装包 -> 配置 1. 装包&#xff08;主包和两个插件包&#xff09; $ npm install element-plus --save npm install -D unplugin-vue-components unplugin-auto-import 2. 配置 在vite.config.js文件中配置&#xff0c;配置完重启&#xff08;n…