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

【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种形式&#xff…...

第五回:样式色彩秀芳华

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…...

【告别篇】大家好,再见了,我转行了,在筹备创业

前言 相信大家也一直看到我的博客没有更新过了,我其实很久没有打开过博客了,也就意味着我很长一段时间都在停滞不前,没有了学习的动力。 现在我上来是想跟大家告个别 : 很多粉丝宝宝的私信我看了,但是没有回&#xf…...

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过程中&#xff0c…...

软测入门(四)Appium-APP移动测试基础

Appium 用来测试手机程序。 测试方面: 功能测试安装卸载测试升级测试兼容测试 Android系统版本不同分辨率不同网络 网络切换、中断测试使用中来电话、短信横竖屏切换 环境搭建 Java安装(查资料)Android SDK安装,配置 HOME和P…...

华为OD机试用Python实现 -【集五福】 |老题且简单

华为OD机试题 最近更新的博客华为 OD 机试 300 题大纲集五福题目描述输入描述输出描述示例一输入输出示例二输入输出代码编写思路Python 代码最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

python打卡day49@浙大疏锦行

知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 一、通道注意力模块复习 & CBAM实现 import torch import torch.nn as nnclass CBAM(nn.Module):def __init__…...

OPENCV图形计算面积、弧长API讲解(1)

一.OPENCV图形面积、弧长计算的API介绍 之前我们已经把图形轮廓的检测、画框等功能讲解了一遍。那今天我们主要结合轮廓检测的API去计算图形的面积,这些面积可以是矩形、圆形等等。图形面积计算和弧长计算常用于车辆识别、桥梁识别等重要功能,常用的API…...

接口 RESTful 中的超媒体:REST 架构的灵魂驱动

在 RESTful 架构中,** 超媒体(Hypermedia)** 是一个核心概念,它体现了 REST 的 “表述性状态转移(Representational State Transfer)” 的本质,也是区分 “真 RESTful API” 与 “伪 RESTful AP…...

零基础在实践中学习网络安全-皮卡丘靶场(第十一期-目录遍历模块)

经过前面几期的内容我们学习了很多网络安全的知识,而这期内容就涉及到了前面的第六期-RCE模块,第七期-File inclusion模块,第八期-Unsafe Filedownload模块。 什么是"遍历"呢:对学过一些开发语言的朋友来说应该知道&…...

Modbus转ETHERNET IP网关:快速冷却系统的智能化升级密钥

现代工业自动化系统中,无锡耐特森Modbus转Ethernet IP网关MCN-EN3001扮演着至关重要的角色。通过这一技术,传统的串行通讯协议Modbus得以在更高速、更稳定的以太网环境中运行,为快速冷却系统等关键设施的自动化控制提供了强有力的支撑。快速冷…...