【python学习笔记】:Excel 数据的封装函数
对比其它编程语言,我们都知道Python最大的优势是代码简单,有丰富的第三方开源库供开发者使用。伴随着近几年数据分析的热度,Python也成为最受欢迎的编程语言之一。而对于数据的读取和存储,对于普通人来讲,除了数据库之外,最常见的就是微软的Excel。
初识Excel
Microsoft Excel是Microsoft为使用Windows和Apple Macintosh操作系统的电脑编写的一款电子表格软件。
格式区别
Excel中有xls和xlsx两种格式,它们之间的区别是:
-
文件格式不同。xls是一个特有的二进制格式,其核心结构是复合文档类型的结构,而xlsx的核心结构是XML类型的结构,采用的是基于 XML的压缩方式,使其占用的空间更小。xlsx 中最后一个 x 的意义就在于此。
-
版本不同。xls是Excel2003及以前版本生成的文件格式,而xlsx是Excel2007及以后版本生成的文件格式。
-
兼容性不同。xlsx格式是向下兼容的,可兼容xls格式。
库的使用
Python自带的模块中有针对xls格式的xlrd和xlwt模块,但这两个库仅仅是针对xls的操作,当我们要操作xlsx格式文件时,则需要使用到openpyxl第三方库。

整体思路
当使用以上几个模块的时候,从理论上我们就可以完全操作不同格式的Excel的读和写,很多人就疑惑,那这篇文章的作用是什么?我们直接学习对应的这三个模块不就好了吗?
答案就是:虽然这几个库已经把Excel的文件、表、行、列的概念完全转换为Python中的对象,但每次操作都需要遍历每一个单元格,甚至很多时候我们要花费大量的时间在思考循环单元格的边界上,这本身就是在重复造轮子,因此我花了半天时间整理了以下六个函数。


代码展示
读取xls格式文件
def read_xls_excel(url,index):'''读取xls格式文件参数:url:文件路径index:工作表序号(第几个工作表,传入参数从1开始数)返回:data:表格中的数据'''# 打开指定的工作簿workbook = xlrd.open_workbook(url)# 获取工作簿中的所有表格sheets = workbook.sheet_names()# 获取工作簿中所有表格中的的第 index 个表格worksheet = workbook.sheet_by_name(sheets[index-1])# 定义列表存储表格数据data = []# 遍历每一行数据for i in range(0, worksheet.nrows):# 定义表格存储每一行数据da = []# 遍历每一列数据for j in range(0, worksheet.ncols):# 将行数据存储到da列表da.append(worksheet.cell_value(i, j))# 存储每一行数据data.append(da)# 返回数据return data
写入xls格式文件
def write_xls_excel(url,sheet_name,two_dimensional_data):'''写入xls格式文件参数:url:文件路径sheet_name:表名two_dimensional_data:将要写入表格的数据(二维列表)'''# 创建工作簿对象workbook = xlwt.Workbook()# 创建工作表对象sheet = workbook.add_sheet(sheet_name)# 遍历每一行数据for i in range(0,len(two_dimensional_data)):# 遍历每一列数据for j in range(0,len(two_dimensional_data[i])):# 写入数据sheet.write(i,j,two_dimensional_data[i][j])# 保存workbook.save(url)print("写入成功")
追加写入xls格式文件
def write_xls_excel_add(url, two_dimensional_data, index):'''追加写入xls格式文件参数:url:文件路径two_dimensional_data:将要写入表格的数据(二维列表)index:指定要追加的表的序号(第几个工作表,传入参数从1开始数)'''# 打开指定的工作簿workbook = xlrd.open_workbook(url)# 获取工作簿中的所有表格sheets = workbook.sheet_names()# 获取指定的表worksheet = workbook.sheet_by_name(sheets[index-1])# 获取表格中已存在的数据的行数rows_old = worksheet.nrows# 将xlrd对象拷贝转化为xlwt对象new_workbook = copy(workbook)# 获取转化后工作簿中的第index个表格new_worksheet = new_workbook.get_sheet(index-1)# 遍历每一行数据for i in range(0, len(two_dimensional_data)):# 遍历每一列数据for j in range(0, len(two_dimensional_data[i])):# 追加写入数据,注意是从i+rows_old行开始写入new_worksheet.write(i+rows_old, j, two_dimensional_data[i][j])# 保存工作簿new_workbook.save(url)print("追加写入成功")
读取xlsx格式文件
def read_xlsx_excel(url, sheet_name):'''读取xlsx格式文件参数:url:文件路径sheet_name:表名返回:data:表格中的数据'''# 使用openpyxl加载指定路径的Excel文件并得到对应的workbook对象workbook = openpyxl.load_workbook(url)# 根据指定表名获取表格并得到对应的sheet对象sheet = workbook[sheet_name]# 定义列表存储表格数据data = []# 遍历表格的每一行for row in sheet.rows:# 定义表格存储每一行数据da = []# 从每一行中遍历每一个单元格for cell in row:# 将行数据存储到da列表da.append(cell.value)# 存储每一行数据data.append(da)# 返回数据return data
写入xlsx格式文件
def write_xlsx_excel(url, sheet_name, two_dimensional_data):'''写入xlsx格式文件参数:url:文件路径sheet_name:表名two_dimensional_data:将要写入表格的数据(二维列表)'''# 创建工作簿对象workbook = openpyxl.Workbook()# 创建工作表对象sheet = workbook.active# 设置该工作表的名字sheet.title = sheet_name# 遍历表格的每一行for i in range(0, len(two_dimensional_data)):# 遍历表格的每一列for j in range(0, len(two_dimensional_data[i])):# 写入数据(注意openpyxl的行和列是从1开始的,和我们平时的认知是一样的)sheet.cell(row=i + 1, column=j + 1, value=str(two_dimensional_data[i][j]))# 保存到指定位置workbook.save(url)print("写入成功")
追加写入xlsx格式文件
def write_xlsx_excel_add(url, sheet_name, two_dimensional_data):'''追加写入xlsx格式文件参数:url:文件路径sheet_name:表名two_dimensional_data:将要写入表格的数据(二维列表)'''# 使用openpyxl加载指定路径的Excel文件并得到对应的workbook对象workbook = openpyxl.load_workbook(url)# 根据指定表名获取表格并得到对应的sheet对象sheet = workbook[sheet_name]for tdd in two_dimensional_data:sheet.append(tdd)# 保存到指定位置workbook.save(url)print("追加写入成功")
读取结果测试
先准备两个Excel文件,如图所示。

其内容如下:


测试代码:

输出结果:

结论:表明读取并没有问题!!!接下来测试写入
写入测试
测试代码:

结果输出:

看到数据被覆盖了!接下来在上面修改后的数据的基础上测试追加写入。
追加写入测试
测试代码:

结果输出:

追加也没有问题。
相关文章:
【python学习笔记】:Excel 数据的封装函数
对比其它编程语言,我们都知道Python最大的优势是代码简单,有丰富的第三方开源库供开发者使用。伴随着近几年数据分析的热度,Python也成为最受欢迎的编程语言之一。而对于数据的读取和存储,对于普通人来讲,除了数据库之…...
如何获取或设置CANoe以太网网卡信息(GET篇)
CAPL提供了一系列函数用来操作CANoe网卡。但是,但是,首先需要明确一点,不管是获取网卡信息,还是设置网卡信息,只能访问CAPL程序所在的节点下的网卡,而不是节点所在的以太网通道下的所有网卡 关于第一张图中,Class节点下,有三个网卡:Ethernet1、VLAN 1.100、VLAN 1.200…...
“终于我从字节离职了...“一个年薪50W的测试工程师的自白...
我递上了我的辞职信,不是因为公司给的不多,也不是因为公司待我不好,但是我觉得,我每天看中我憔悴的面容,每天晚上拖着疲惫的身体躺在床上,我都不知道人生的意义,是赚钱吗?是为了更好…...
【Spring】八种常见Bean加载方式
🚩本文已收录至专栏:Spring家族学习 一.引入 (1) 概述 关于bean的加载方式,spring提供了各种各样的形式。因为spring管理bean整体上来说就是由spring维护对象的生命周期,所以bean的加载可以从大的方面划分成2种形式ÿ…...
第五回:样式色彩秀芳华
import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np第五回详细介绍matplotlib中样式和颜色的使用,绘图样式和颜色是丰富可视化图表的重要手段,因此熟练掌握本章可以让可视化图表变得更美观,突出重点和凸显艺术性。…...
关于@Test单元测试
1、关于doReturndoReturn(new Test()).when(testService).updateStatusByLock(any(), any());在单元测试里这个方法可以执行到这里之间跳过不去执行,返回你想要的返回值2、关于givengiven(user.getName(any())).willReturn("张三");在单元测试里这个方法 …...
【项目实战】WebFlux整合r2dbc-mysql实战
一、背景 Webflux虽然是响应式的,但是没办法,JDBC是基于阻塞IO实现的,所以无法真正的威力发挥不出来。 但是,Webflux一旦整合了R2DBC之后,那么它将不再受限于数据库连接了,真正打通了响应式应用的任督二脉,性能才被释放。 当然,除了Spring推出的R2DBC协议,还有Orac…...
go版本分布式锁redsync使用教程
redsync使用教程前言redsync结构Pool结构Mutex结构acquire加锁操作release解锁操作redsync包的使用前言 在编程语言中锁可以理解为一个变量,该变量在同一时刻只能有一个线程拥有,以便保护共享数据在同一时刻只有一个线程去操作。对于高可用的分布式锁应…...
大数据之Hudi数据湖_大数据治理_简介_发展历史_特性_应用场景---大数据之Hudi数据湖工作笔记0001
支持hive spark flink 美国公司开发的~ 都在使用,这些企业都在用 支持hadoop的,更新,插入,删除 和数据增量处理 支持流式数据处理. hive是离线数仓 hive不支持事物 insert overwrite 底层后来通过这种方式支持了事物 insert overwrite处理数据很低效,因为更新是基于覆盖实现…...
射频功率放大器基于纵向导波的杆状构件腐蚀诊断方法的研究
实验名称:基于纵向导波的杆状构件腐蚀诊断方法研究方向:无损探伤测试设备:信号号发生器、安泰ATA-8202功率放大器、数据采集卡、直流电源、超声探头、钢杆、前置放大器。实验过程:图:试验装置试验装置如图3.2所示。监测…...
Leedcode 二分查找 理解1
一个up的理解 一、二分查找基础例题 力扣https://leetcode.cn/problems/binary-search/ 二、二分查找模板问题 带搜索区间分为3个部分: 1、[mid],直接返回 2、[left,mid-1],设置边界right mid - 1 3、[mid1,right]&#x…...
【告别篇】大家好,再见了,我转行了,在筹备创业
前言 相信大家也一直看到我的博客没有更新过了,我其实很久没有打开过博客了,也就意味着我很长一段时间都在停滞不前,没有了学习的动力。 现在我上来是想跟大家告个别 : 很多粉丝宝宝的私信我看了,但是没有回…...
Java——岛屿数量
题目链接 leetcode在线oj题——岛屿数量 题目描述 给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相…...
《代码整洁之道》笔记
1章:专业人士要有专业人士素养,要有责任心,编写代码尽可能完善没有bug,有bug也要勇于承担。坚持学习,坚持练习,保证自己的专业技能。谦虚,相互学习,与顾客达成一致2章:说…...
个人网站如何集成QQ快捷登录功能?
目录 一、网站集成QQ快捷登录的好处 二、网站接入QQ快捷登录具体步骤 (1)登录到QQ互联官网 (2)进行个人开发者认证 (3)创建网站应用 (4)填写网站资料 三、如何在本地开发环境…...
从工厂打螺丝到月薪18k测试工程师,我该满足吗?
以前我比较喜欢小米那句“永远相信美好的事情即将发生”,后来发现如果不努力不可能有美好的事情发生!01高中毕业进厂5年,创业经商多次战败,为了生计辗转奔波高中毕业后我就进了工厂,第一份工作是做模具加工。从500元一…...
【相关分析-高阶绘图】MATLAB实现皮尔逊相关分析-散点直方图
虽然皮尔逊相关分析很常见,但如何更好的展现相关性、散点分布、柱状分布,以提升研究结果的美感和冲击感呢?本文拟通过MATLAB绘制包含散点分布、柱状分布、线性展示的散点直方图,有助于审稿人眼前一亮。 1、Pearson相关系数原理 Pearson相关系数(Pearson Correlation Co…...
Spark性能优化二 Shuffle机制分析
(一) 什么情况下发生shuffle 在MapReduce框架中,Shuffle是连接Map和Reduce之间的桥梁,Map阶段通过shuffle读取数据并输出到对应的Reduce;而Reduce阶段负责从Map端拉取数据并进行计算。在整个shuffle过程中,…...
软测入门(四)Appium-APP移动测试基础
Appium 用来测试手机程序。 测试方面: 功能测试安装卸载测试升级测试兼容测试 Android系统版本不同分辨率不同网络 网络切换、中断测试使用中来电话、短信横竖屏切换 环境搭建 Java安装(查资料)Android SDK安装,配置 HOME和P…...
华为OD机试用Python实现 -【集五福】 |老题且简单
华为OD机试题 最近更新的博客华为 OD 机试 300 题大纲集五福题目描述输入描述输出描述示例一输入输出示例二输入输出代码编写思路Python 代码最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典...
SystemVerilog进阶:深入探索随机化约束的高级应用
1. 从基础到进阶:SystemVerilog随机化约束的核心价值 在芯片验证领域,随机化验证已经成为提高验证效率的黄金标准。SystemVerilog的随机化约束机制,就像给验证工程师配备了一个智能数据生成器,可以自动产生符合设计规范的测试场景…...
工业质检避坑指南:手把手教你根据数据成本选择异常检测模型(RGB/PCD/多模态实战)
工业质检实战:如何基于数据成本选择最优异常检测方案 在工业质检领域,算法工程师常面临一个现实困境:实验室里刷榜的模型往往需要昂贵的数据采集设备,而工厂产线上可能只有最基础的RGB相机。我曾参与过多个工业质检项目࿰…...
ESP32硬件定时器虚拟化:16路ISR定时器实现原理与工程实践
1. ESP32_New_TimerInterrupt 库深度解析:16路高精度硬件定时器中断的工程实践1.1 为什么嵌入式系统迫切需要此库在ESP32系列微控制器的实际工程开发中,硬件定时器资源极其稀缺且关键。标准ESP32芯片仅配备两组定时器组(Timer Group 0/1&…...
WWW-万维网
万维网的概念与组成结构万维网(World Wide Web,WWW)是一个分布式的信息存储空间,在这个空间中:一个事物被称为一样 “资源”,并由一个全域 “统一资源定位符”(URL)标识。这些资源通…...
多层PCB结构与设计核心技术解析
多层PCB内部结构解析与设计指南1. 多层PCB技术概述1.1 多层PCB的基本概念现代电子设备对电路板的要求越来越高,多层PCB已成为复杂电子系统的标准配置。与单层或双层PCB相比,多层PCB通过在绝缘基材上叠加多个导电层,实现了更高的布线密度和更优…...
从人工到智能:SubtitleOCR如何实现硬字幕提取的效率革命
从人工到智能:SubtitleOCR如何实现硬字幕提取的效率革命 【免费下载链接】SubtitleOCR 快如闪电的硬字幕提取工具。仅需苹果M1芯片或英伟达3060显卡即可达到10倍速提取。A very fast tool for video hardcode subtitle extraction 项目地址: https://gitcode.com/…...
计算机毕业设计:汽车数据可视化与后台管理平台 Django框架 requests爬虫 可视化 车辆 数据分析 大数据 机器学习(建议收藏)✅
博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立软件开发工作室,专注于计算机相关专业项目实战6年之久,累计开发项目作品上万套。凭借丰富的经验与专业实力,已帮助成千上万的学生顺利毕业,…...
Qwen3-14B-AWQ模型效果深度评测:在算法题求解上的表现
Qwen3-14B-AWQ模型效果深度评测:在算法题求解上的表现 1. 评测背景与模型简介 在AI技术快速发展的今天,大语言模型在代码生成和算法解题领域展现出越来越强的能力。Qwen3-14B-Int4-AWQ作为通义千问系列的最新量化版本,在保持较高推理能力的…...
离网逆变器下垂控制实战:从公式推导到MATLAB仿真(附资源下载)
离网逆变器下垂控制实战:从公式推导到MATLAB仿真 在新能源发电系统中,离网逆变器的稳定运行至关重要。传统电压电流双闭环控制虽然简单直接,但在面对复杂负载变化时,往往会出现电压跌落、频率失稳等问题。下垂控制技术通过模拟同…...
联想ThinkPad声卡驱动安装避坑指南:从E470到X1 Carbon的通用解法
ThinkPad声卡驱动安装全攻略:从型号识别到疑难排解 ThinkPad作为商务笔记本的代表,其稳定性和兼容性一直备受推崇。但即便是这样成熟的产品线,声卡驱动问题依然困扰着不少用户——从经典的E470到高端的X1 Carbon,不同机型可能面临…...
