当前位置: 首页 > news >正文

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 操作工具。

相关文章:

Python 操作 Excel

之前看过一篇文章,说一个工作多年的老员工,处理数据时只会用复制粘贴到 Excel ,天天加班工作还完不成,后来公司就招了一个会 Python 的新人,结果分分钟就处理完成。所以工作中大家经常会使用 Excel 去处理以及展示数据…...

21.添加websocket模块

这里默认读者了解websocket协议,若是还不了解可以看下这篇文章wesocket协议。 websocket主要有三个步骤,1通过HTTP进行握手连接,2进行双向通信,3.协商断开连接 第一步的握手连接需要HTTP,所以还需要使用到上一节讲解…...

Linux UDP编程流程

文章目录 UDP编程流程UDP协议无连接的特点UDP协议数据报的特点 UDP编程流程 UDP 提供的是无连接、不可靠的、数据报服务。服务器端和客户端没有什么本质上的区别。编程流程如下: socket()用来创建套接字,使用 udp 协议时,选择数据报服务 SOC…...

【opencv】多版本安装

安装opencv3.2.0以及对应的付费模块 一、安装多版本OpenCV如何切换 按照如下步骤安装的OpenCV,在CMakeLists.txt文件中,直接指定opencv的版本就可以找到相应版本的OpenCV,为了验证可以在CMakeLists.txt文件中使用如下指令输出版本验证&…...

webpack打包常用配置项

webpack打包配置项 参考链接 文件结构:最基础版 先安装 npm i webpack webpack-cli --dev 运行命令:npx webpack 进行打包 1. 配置webpack.config.js文件: const path require(path); module.exports {mode: development, // 开发环境 …...

回归预测 | MATLAB实现MPA-BiGRU海洋捕食者算法优化双向门控循环单元多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现MPA-BiGRU海洋捕食者算法优化双向门控循环单元多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现MPA-BiGRU海洋捕食者算法优化双向门控循环单元多输入单输出回归预测(多指标,多图&a…...

selenium_webdriver自动化测试指南

目录 1 引言 4 1.1 目的.. 4 1.2 背景.. 4 1.3 参考资料.. 4 2 安装并引用Selenium2. 5...

红米Note12Turbo解锁BL刷入PixelExperience原生ROM系统详细教程

红米Note12Turbo的兄弟是国外POCO F5 机型,并且该机性价比非常高,国内外销量也还可以,自然不缺第三方ROM适配。目前大家心心念念的原生PixelExperience已成功发布,并且相对来说,适配程度较高,已经达到日用的…...

NoSQL之Redis配置与优化(一)

关系数据库与非关系型数据库 : ●关系型数据库: 关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。 SQL 语句(标准数据查询语言)就是一种基于…...

Boost搜索引擎

项目背景 先说一下什么是搜索引擎,很简单,就是我们平常使用的百度,我们把自己想要所有的内容输入进去,百度给我们返回相关的内容.百度一般给我们返回哪些内容呢?这里很简单,我们先来看一下. 搜索引擎基本原理 这里我们简单的说一下我们的搜索引擎的基本原理. 我们给服务器发…...

侧边栏的文章分类、热门文章和热门文章的展示(Go 搭建 qiucode.cn 之九)

早就有言,秋码记录 虽早已不是原来的面貌,但这终究是不防碍我们使用golang来搭建它。 而又为什么是使用golang呢?并非是其他编程语言呢?想必 时候回答【我为什么要学习 Go 语言(golang)】这个问题了 已经给出了答案! 当然,当初学习golang时,不单单是为了搭建一个博客应…...

LeetCode——贪心篇(二)

刷题顺序及思路来源于代码随想录,网站地址:https://programmercarl.com 134. 加油站 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗…...

Linux find

1.find介绍 linux查找命令find是linux运维中很重要、很常用的命令之一,find用于根据指定条件的匹配参数来搜索和查找文件和目录列表,我们可以通过权限、用户、用户组、文件类型、日期、大小等条件来查找文件。 2.find语法 find语法 find [查找路径] …...

UE4实现断线重连功能

断线重连的整体逻辑是 设备离线后,根据需要决定是否保留pawn,还是设备重连后再重新生成一个,然后是断线重连时的验证方式,最后是playerstate重连后的属性保留 重载Playercontroller的PawnLeavingGame,这里是设备断线后&#xff0…...

nginx笔记

1. nginx 简介 nginx性能比apache强,体现 在io模型方面 76 Pv: UV : 不同浏览器是不同的UV GET 获取 POST 上传 HEAT 只看头 访问网站的流程 1.dns解析 2.cdn 3.tcp 4.web服务器 处理 建立连接 接收请求 处理请求 GET POST等 获取资源 构…...

动态库的制作和使用

动态库和静态库的工作原理 配置环境变量 方式1: 坏处:环境变量是临时的 方式2: 1 用户级别的配置: 进入到/home,找到.bashrc,进入 先去找到库的路径 然后再到.bashrc最后一行输入路径 使其生效 2 系统…...

AWS Glue Pyspark+Athena基础学习汇总

Pyspark 基础学习汇总篇🍎 一、AWS 架构 ① AWS Glue:工作平台,包括脚本的编写以及管理脚本的运行状态以及调度等(主要:数据库配置、ETL和数据转换脚本编写、调度) ② Amazon S3 数据湖(数仓):数据的存储 ③ Athena:(雅典娜)SQL直接编写查询工作台(会产生费用) ④ Q…...

智能合约安全新范式,超越 `require`和`assert`

智能合约安全新范式,超越 require_assert 摘要 不要只为特定的函数写 require 语句;为你的协议写 require 语句。函数遵循检查(requirements)-生效(Effects)-交互(INteractions)协议不变性(Invariants)或 FREI-PI 模式可以帮助你的合约更加安全&#x…...

【ESP-S3-BOX-Lite花屏问题】:Github下载源码(出厂源码factory_demo)编译调试到ESP-S3-BOX-Lite中出现花屏现象

项目场景: 最近拿到了一块乐鑫的 ESP-S3-BOX-Lite (esp-box: ESP-BOX 是乐鑫信息科技) 详细资料(esp32_s3_box_lite) 版本信息 ESP-BOX依赖的 ESP-IDF分支信息支持状态master> release/v5.1 commit id: 22cfbf3…...

Redis集群3.2.11离线安装详细版本(使用Ruby)

1.安装软件准备 1.Redis版本下载 Index of /releases/http://download.redis.io/releases/ 1.2gcc环境准备 GCC(GNU Compiler Collection,GNU编译器套件)是一套用于编译程序代码的开源编译器工具集。它的主要用途是将高级编程语言(如C、C++、Fortran等)编写的源代码转换…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

HTML 列表、表格、表单

1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

C++ 基础特性深度解析

目录 引言 一、命名空间(namespace) C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用(reference)​ C 中的引用​ 与 C 语言的对比​ 四、inline(内联函数…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...