Python操作Excel

news2025/1/15 21:54:00

文章目录

  • xlrd模块
    • 安装xlrd库
    • 打开Excel文件读取
    • 获取指定工作表
    • 操作指定行
    • 操作指定列
    • 操作指定单元格
  • 使用示例

xlrd模块

xlrd是Python处理Excel表格数据的一个模块,能够对Excel中的数据进行读取。

安装xlrd库

在命令行或终端中输入以下命令进行安装:

pip install xlrd==1.2.0

说明一下: 由于下面将以读取xlsx格式的文件来演示xlrd模块的使用,因此此处安装xlrd时指明了版本号,否则pip会默认安装最新版本的xlrd,而最新版本的xlrd删除了对xlsx格式文件的支持。

打开Excel文件读取

open_workbook函数

使用xlrd模块中的open_workbook函数可以打开指定的Excel文件。比如:

import xlrd

data = xlrd.open_workbook('D:/github/Python-code/PythonProject/test.xlsx')

如果你的Python程序和Excel文件在同级目录下,也可以通过如下方法获得Excel文件的路径:

  • 先使用os.path模块中的abspath函数,获得当前Python程序所在的绝对路径。
  • 再使用os.path模块中的dirname函数,获得当前Python程序所在的目录的绝对路径。
  • 最后使用os.path模块中的join函数,将Python程序所在的目录路径与Excel文件的文件名进行拼接。

这时在打开Excel文件时,将拼接得到的路径传入open_workbook函数即可。比如:

import xlrd
import os

file_path = os.path.dirname(os.path.abspath(__file__))
base_path = os.path.join(file_path, 'test.xlsx')
data = xlrd.open_workbook(base_path)

说明一下: open_workbook函数返回的是一个Book对象,这个对象代表的就是打开的Excel文件。

获取指定工作表

Excel工作表

工作表指的就是Excel文件中的Sheet,一个Sheet即为一个工作表。比如:

在这里插入图片描述

说明一下: 获取工作表指的是获取某个Excel文件的工作表,因此下面获取工作表的函数都是Book对象的成员函数,需要使用Book对象来进行调用。

sheets函数

使用sheets函数能够获取Book对象中所有的工作表,这些工作表将会以列表的形式返回,因此可以进一步通过索引的方式获取指定的工作表。比如:

table = data.sheets()[0]  # 获取Sheet1工作表

说明一下: Sheet1的索引为0,Sheet2的索引为1,以此类推。

sheet_by_index函数

使用sheet_by_index函数能够通过索引的方式获取指定的工作表。比如:

table = data.sheet_by_index(0)  # 获取Sheet1工作表

说明一下: 这里的索引规则与上述索引规则相同。

sheet_by_name函数

使用sheet_by_name函数能够通过名称的方式获取指定的工作表。比如:

table = data.sheet_by_name('Sheet1')  # 获取Sheet1工作表

说明一下: 上述三个函数都会返回一个Sheet对象,这个对象代表的就是获取到的工作表。

sheet_names函数

使用sheet_names函数可以获取Book对象中所有工作表的名字,这些名字将会以列表的形式返回。比如:

print(data.sheet_names())  # ['Sheet1', 'Sheet2', 'Sheet3']

sheet_loaded函数

使用sheet_loaded函数可以检查某个工作表是否导入完毕。比如:

print(data.sheet_loaded(0))         # 检查Sheet1工作表是否导入完毕
print(data.sheet_loaded('Sheet1'))  # 检查Sheet1工作表是否导入完毕

说明一下: 指定工作表时可以通过索引的方式指定,也可以通过名字的方式指定。

操作指定行

操作指定行指的是操作某个Excel工作表的行,因此下面操作指定行的函数都是Sheet对象的成员函数,需要使用Sheet对象来进行调用。

nrows

nrows是Sheet对象中的一个成员变量,通过该成员变量就能获取工作表中的行数。比如:

nrows = table.nrows  # 获取工作表中的行数

row函数

使用row函数可以获取工作表的指定行中所有单元格对象组成的列表。比如:

print(table.row(0))  # 获取第0行中所有单元格对象组成的列表

row_slice函数

使用row_slice函数也可以获取工作表的指定行中所有单元格对象组成的列表。比如:

print(table.row_slice(0, start_colx=0, end_colx=None))  # 获取第0行中所有单元格对象组成的列表

说明一下:

  • row_slice函数的start_colx参数,表示从指定行的第start_colx列的单元格开始获取,start_colx的默认值为0,即从指定行中第0列的单元格开始获取。
  • row_slice函数的end_colx参数,表示在指定行中需要被获取的最后一个单元格的下一个单元格的列下标,end_colx的默认值为None,即一直获取到最后一个单元格为止。

row_types函数

使用row_types函数可以获取工作表的指定行中所有单元格的数据类型组成的列表。比如:

print(table.row_types(0, start_colx=0, end_colx=None))  # 获取第0行中所有单元格的数据类型组成的列表

Python读取Excel单元格的内容返回以下几种类型:

类型对应值
XL_CELL_EMPTY0
XL_CELL_TEXT1
XL_CELL_NUMBER2
XL_CELL_DATE3
XL_CELL_BOOLEAN4
XL_CELL_ERROR5
XL_CELL_BLANK6

比如一个单元格中的内容是float类型的,那么row_types函数返回的列表中该单元格对应的数字就是2。

row_values函数

使用row_values函数可以获取工作表的指定行中所有单元格的数据组成的列表。比如:

print(table.row_values(0, start_colx=0, end_colx=None))  # 获取第0行中所有单元格的数据组成的列表

row_len函数

使用row_len函数可以获取工作表的指定行中有效单元格的个数

print(table.row_len(0))  # 获取第0行中有效单元格的个数

操作指定列

操作指定列指的是操作某个Excel工作表的列,因此下面操作指定列的函数也都是Sheet对象的成员函数,需要使用Sheet对象来进行调用。

ncols

ncols是Sheet对象中的一个成员变量,通过该成员变量就能获取工作表中的列数。比如:

ncols = table.ncols  # 获取工作表中的列数

col函数

使用col函数可以获取工作表的指定列中所有单元格对象组成的列表。比如:

print(table.col(0))  # 获取第0列中所有单元格对象组成的列表

col_slice函数

使用col_slice函数也可以获取工作表的指定列中所有单元格对象组成的列表。比如:

print(table.col_slice(0, start_rowx=0, end_rowx=None))  # 获取第0列中所有单元格对象组成的列表

说明一下:

  • col_slice函数的start_rowx参数,表示从指定列的第start_rowx行的单元格开始获取,start_rowx的默认值为0,即从指定列中第0行的单元格开始获取。
  • col_slice函数的end_rowx参数,表示在指定列中需要被获取的最后一个单元格的下一个单元格的行下标,end_rowx的默认值为None,即一直获取到最后一个单元格为止。

col_types函数

使用col_types函数可以获取工作表的指定列中所有单元格的数据类型组成的列表。比如:

print(table.col_types(0, start_rowx=0, end_rowx=None))  # 获取第0列中所有单元格的数据类型组成的列表

col_values函数

使用col_values函数可以获取工作表的指定列中所有单元格的数据组成的列表。比如:

print(table.col_values(0, start_rowx=0, end_rowx=None))  # 获取第0列中所有单元格的数据组成的列表

操作指定单元格

操作指定单元格指的是操作某个Excel工作表的单元格,因此下面操作指定单元格的函数也都是Sheet对象的成员函数,需要使用Sheet对象来进行调用。

cell函数

使用cell函数可以获取工作表中指定位置的单元格对象。比如:

print(table.cell(0, 1))  # 获取第0行第1列的单元格对象

cell_type函数

使用cell_type函数可以获取工作表中指定位置单元格的数据类型。比如:

print(table.cell_type(0, 1))  # 获取第0行第1列单元格的数据类型

cell_value函数

使用cell_value函数可以获取工作表中指定位置单元格中的数据。比如:

print(table.cell_value(0, 1))  # 获取第0行第1列的单元格中的数据

使用示例

现有如下Excel表格,请求出3班数学成绩的平均分

在这里插入图片描述

步骤如下:

  1. 使用open_workbook函数打开该Excel文件进行读取。
  2. 使用sheet_by_index函数获取Sheet1工作表。
  3. 通过成员变量nrows获取表格的行数。
  4. 使用for循环遍历表格中的每一行,通过cell_value函数判断每一行的同学是否是3班的同学,如果是则将该同学的数学成绩累加到total变量,同时用count变量同级3班同学的人数。
  5. 表格遍历结束后,total除以count所得到的值便是3班数学成绩的平均分。

代码如下:

import xlrd
import os

# 1.打开Excel文件读取
file_path = os.path.dirname(os.path.abspath(__file__))
base_path = os.path.join(file_path, 'test.xlsx')
data = xlrd.open_workbook(base_path)

# 2.获取指定工作表
table = data.sheet_by_index(0)

# 3.求3班数学成绩平均分
nrows = table.nrows  # 获取行数
total = 0
count = 0
for i in range(1, nrows):  # 遍历每一行,统计3班人数和数学成绩总和
    if table.cell_value(i, 1) == 3:
        total += table.cell_value(i, 3)
        count += 1
print(f'3班数学成绩平均分={total/count}')  # 3班数学成绩平均分=118.0

说明一下: 表格的第一行表头,遍历时无需遍历下标为0行,因此在range函数中指定的起始值为1。

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

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

相关文章

python数据分析 之 pandas数据统计

目录 一:数据集准备 二:加载文件 三:分组操作进行统计 一:数据集准备 可以创建一个txt,并放置pycharm工程目录下 下面是博主的数据集测试,所用数据,需要的自取 1001,Chinese,1,80 1001,Chine…

富芮坤蓝牙FR801xH开发环境搭建

富芮坤蓝牙FR801xH方案开发资源包网盘下载链接:网盘 提取码:30qu 搭建过程: 安装Keil开发工具:mdk525.exe 可以从Keil官网下载:http://www.keil.com/files/eval/MDK525.EXE 也可以使用网盘tools目录里的包装包 其中需要注意选择的…

Qt扫盲-QScrollArea理论总结

这里写目录标题1. 概述2. 滚动条策略3. 子控件4. 尺寸提示1. 概述 QScrollArea 用于显示滚动区域框架内的子控件的内容。如果控件超过框架的大小,视图可以提供滚动条,以便可以查看子控件的整个区域。子控件必须使用 setWidget() 指定。但是在 QDesigner…

【车载开发系列】UDS诊断---请求下载($0x34)

【车载开发系列】UDS诊断—请求下载($0x34) UDS诊断---请求下载($0x34)【车载开发系列】UDS诊断---请求下载($0x34)一.概念定义二.产生背景三.报文格式1)请求报文2)肯定响应3&#x…

[附源码]Nodejs计算机毕业设计基于的民宿租赁系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

MySQL处理非结构化JSON数据(附 MyBatis-Plus 集成)

概述 MySQL 自5.7起开始支持JSON格式的非结构化数据,并且在8.x版本进行性能优化 关于 JSON JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript(European Computer Manufacturers Asso…

Spring Cloud Alibaba

Spring Cloud Alibaba第五部分 第二代 Spring Cloud 核心组件(SCA)第 1 节 Nacos 服务注册和配置中心1.1 Nacos 介绍1.2 Nacos 单例服务部署1.3 微服务注册到Nacos1.4 负载均衡1.5 Nacos 数据模型(领域模型)1.6 Nacos 配置中心1.6…

智能家居DIY创意之智能灯泡

一、什么是智能灯 传统的灯泡是通过手动打开和关闭开关来工作。有时,它们可以通过声控、触控、红外等方式进行控制,或者带有调光开关,让用户调暗或调亮灯光。 智能灯泡内置有芯片和通信模块,可与手机、家庭智能助手、或其他智能…

水下潜航器的建模与控制

(线性系统理论大作业) 题目 水下潜器模型,可能是潜艇或者鱼雷等对象。一个主推进螺旋桨,前后两对水平陀翼,后面一对垂直陀翼。   潜器前进过程中,通过调节助推进螺旋桨推力,以及三对陀翼的角度变化,对潜…

paddle_gpu安装配置

paddle_gpu安装配置1.确认安装版本2. 安装相关文件2.1 下载与安装3.cuDNN下载及安装4.创建conda虚拟环境5.参考教程1.确认安装版本 操作系统:windows安装方式:condapython版本:python3.7CUDA版本:本人电脑版本【11.6.134】,低于此版本电脑都…

傻白入门芯片设计,盘点CPU业界的顶尖人才(十四)

这篇文章主要是针对现在CPU业界的顶尖人才,体现为以下几点:提出了革命性的技术路线,做出了杰出的产品,为公司做出重要贡献。按照当前供职情况,根据国际巨头所在公司分类,我主要收集了AMD,其余几…

【DevOps实战系列】第八章:详解Jenkins集成Docker私服Nexus3

个人亲自录制全套DevOps系列实战教程 :手把手教你玩转DevOps全栈技术 Jenkins集成Docker镜像仓库 docker私服已经搭建完毕,下边我们期望jenkins做的事是: ①通过git拉取代码②通过maven构建生成jar包③构建含有jar包的镜像④推送到docker仓库…

五问补盲(三) | 补盲激光雷达,敢不敢直面新的安全威胁?

作者 | 爱LiDAR的小飞哥 编辑 | 王博在激光雷达上车的热潮中,各家都在技术参数上进行着“你死我活”的拼杀。 那么,参数代表一切吗?举个例子,测距200米的激光雷达一定比测距150米的更好吗? 可以肯定地说,非…

JVM 之 AdaptiveSizePolicy 参数

AdaptiveSizePolicy 简介 AdaptiveSizePolicy(自适应大小策略) : JDK 1.8 默认使用 UseParallelGC 垃圾回收器,该垃圾回收器默认启动了 AdaptiveSizePolicy,会根据GC的情况自动计算计算 Eden、From 和 To 区的大小。 配置: 开启…

vue生命周期

vue的生命周期就是vue实例从创建到销毁的全过程,就是从开始创建、初始化数据、编译模版、挂载Dom、更新渲染、卸载等⼀系列过程,在这个过程中存在生命周期的钩子函数,我们可以在对应阶段添加实现自己的代码。 钩子函数(共8个&…

智慧物流|Springboot+Vue+Nodejs实现智慧物流系统

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

Java如何读取输入

文章目录0.写在前面1.介绍2.举例3.写在最后0.写在前面 Java语言可以接收从键盘的输入,一般用来在调试的时候会用到,实际开发一般不用。 所以在此记录比较简单。 1.介绍 读取流程: 1.导入需要的工具包 2.构造一个“标准输入流”System.in关…

软件测试基础理论体系学习10-什么是本地化测试?本地化测试有哪些问题?本地化测试的重点是什么?

10-什么是本地化测试?本地化测试有哪些问题?本地化测试的重点是什么?1 本地化测试概述1.1软件本地化概念1.2 软件本地化工程1.3 软件本地化的重要性2 本地化测试翻译问题2.1 软件本地化不等于软件翻译2.2 软件本地化语言翻译技术2.2.1 翻译记…

K8s Service 负载均衡底层分析

当我们创建完 Pod 后,Pod 的 IP 与 Service IP 会自动分配,而 Pod IP 仅 K8s 集群内部访问,那 K8s 集群外部客户端又是如何访问 Pod 呢?看了官方相关文档,查询到是通过 Host 的 iptables(即 K8s 集群节点的…

服务器多用户共享Anaconda

实验室最近买了台服务器,这篇Blog用来记载一下给ubuntu 20.04的服务器安装一个共享的anaconda的步骤。 安装Anaconda 首先去anaconda的官网下载linux的安装包,推送到服务上。然后进行安装: sudo bash ./Anaconda3-2022.10-Linux-x86_64.sh…