18.使用读写包操作Excel文件:xlrd、xlwt 和 xlutils 包

news2025/3/18 18:11:42

一 xlrd、xlwt 和 xlutils 包的介绍

OpenPyXL 和 xlrd、xlwt 、xlutils 的区别在笔记 15 。


二 如何使用 xlrd 读取文件

1.获取所有工作表的名称

book.sheet_names():得到一个列表。

import xlrd
import xlwt
from xlwt.Utils import cell_to_rowcol2
import xlutils
import excel

book = xlrd.open_workbook("xl/stores.xls")
print(book.sheet_names())

for sheet in book.sheets():
 print(sheet.name)

2.获取工作表对象

通过名称或者索引(从0开始)。

sheet = book.sheet_by_index(0)
sheet = book.sheet_by_name("2019")

3.获取工作表维度

print(sheet.nrows)
print(sheet.ncols)

补充:xlrd 在处理 Excel 文件时,使用 sheet.nrows 和 sheet.ncols 属性来获取工作表的总行数和总列数,而这些值反映的是工作表的实际维度,而不是 "使用区域"(used range)的维度。在 Excel 中,"使用区域" 是指包含数据的矩形区域。它排除了不包含数据的空行和空列。

sheet.nrows 返回工作表中的总行数。

sheet.ncols 返回工作表中的总列数。

这些值表示整个工作表的大小,包括可能存在的空行和空列。

如果你只关心包含数据的区域,而忽略空行和空列,你可能需要手动计算"使用区域"。这可以通过检查每行和每列是否有数据来实现。例如,遍历所有行和列,找到第一个和最后一个包含数据的行和列,以确定实际使用的区域。

4.使用A1表示法或者单元格索引(从0开始)读取各个单元格的值

sheet.cell(*cell_to_rowcol2("B3")).value
sheet.cell(2, 1).value
sheet.cell(*cell_to_rowcol2("B3")).value:

cell_to_rowcol2("B3"):用于将 Excel 风格的单元格地址(如 "B3") 转换为行号和列号的元组 (row, col)"B3" 会被转换为 (2, 1)。

*cell_to_rowcol2("B3"):* 是解包操作符,用于将元组 (2, 1) 解包为两个独立的参数 2 和 1

sheet.cell(2, 1).value: 获取指定单元格的值。.value 属性返回单元格中的内容。

sheet.cell(2, 1) 获取第 3 行(索引 2)第 2 列(索引 1)的单元格对象。

5.使用 excel 模块读取一个区间中单元格的值

data = excel.read(sheet, "B2")
data[:2] # 打印前两行

6.处理大型文件

在读取旧式的 xls 格式的大型文件时,xlrd 可以按需加载工作表。

with xlrd.open_workbook("xl/stores.xls", on_demand=True) as book:
 sheet = book.sheet_by_index(0) # 只加载第一张工作表

with语句用于确保文件在使用完毕后能够被正确关闭。book变量代表打开的工作簿对象。

on_demand=True参数指定了按需加载模式。在按需加载模式下,xlrd不会一次性将整个工作簿加载到内存中,加载特定的工作表或单元格数据。

sheet = book.sheet_by_index(0):使用 sheet_by_index方法从工作簿 book中获取了索引为0的工作表,并将其赋值给变量sheet。工作表的索引是从0开始的,所以sheet_by_index(0)返回的是第一个工作表。

需要注意的是,由于使用了按需加载模式,此时只有第一个工作表的数据被加载到了内存中。

搭配 pandas 在上下文管理器模式下使用 xlrd:
with xlrd.open_workbook("xl/stores.xls", on_demand=True) as book:
 with pd.ExcelFile(book, engine="xlrd") as f:
   df = pd.read_excel(f, sheet_name=0)

7.关闭工作簿

调用 book.release_ resources() 。


三 如何使用 xlwt 写入文件

xlwt 并不能生成图表,并且只支持 bmp 格式的图片。

1.导包

 import xlwt
 from xlwt.Utils import cell_to_rowcol2
 import datetime as dt
 import excel

2.实例化工作簿

book = xlwt.Workbook()

3.添加工作表并为其命名

sheet = book.add_sheet("Sheet1")

4.使用A1表示法和单元格索引(从0开始)写入各个单元格

sheet.write(*cell_to_rowcol2("A1"), "Hello 1")
sheet.write(r=1, c=0, label="Hello 2")

在 xlwt 中,sheet.write() 方法用于向工作表的特定单元格写入数据。这个方法通常需要三个参数:行号 (r)、列号 (c)、以及要写入的数据 (label)。

sheet.write(*cell_to_rowcol2("A1"), "Hello 1"):这行代码的目的是将字符串 "Hello 1" 写入到单元格 A1。这里使用了 cell_to_rowcol2() 函数,该函数接受一个 Excel 单元格地址(如 "A1"),并返回一个包含行号和列号的元组。*cell_to_rowcol2("A1") 是解包操作,它将这个元组解包为两个独立的参数(行号和列号),然后传递给 sheet.write() 方法。

为什么有解包操作:

因为 sheet.write() 方法期望接收三个独立的参数:行号 (r)、列号 (c) 和要写入的数据 (label)。然而 cell_to_rowcol2() 函数返回的是一个包含两个元素的元组,这两个元素分别代表行号和列号。

def return_tuple():
    return (1, 2)

# 不使用解包
a, b = return_tuple()  # a = 1, b = 2

# 使用解包作为函数参数
def print_numbers(x, y):
    print(x, y)

print_numbers(*return_tuple())  # 输出: 1 2

return_tuple 函数,该函数不接受任何参数,并返回一个包含两个整数 (1, 2) 的元组。通过调用 return_tuple() 函数,并将其返回值赋给两个变量 a 和 b,其中 a 被赋值为 1b 被赋值为 2

print_numbers 的函数,该函数接受两个参数 x 和 y,并将它们打印出来。解包操作允许我们将一个元组中的元素作为参数列表传递给另一个函数,而无需手动提取元组中的每个元素。

sheet.write(r=1, c=0, label="Hello 2"):这行代码直接将字符串 "Hello 2" 写入到第2行第1列的单元格中( r=1 表示第2行,c=0 表示第1列),label 参数指定了要写入的数据。

5.格式化:填充颜色、对齐、边框和字体

formatting = xlwt.easyxf("font: bold on, color red;"
 "align: horiz center;"
 "borders: top_color red, bottom_color red,"
 "right_color red, left_color red,"
 "left thin, right thin,"
 "top thin, bottom thin;"
 "pattern: pattern solid, fore_color yellow;")
sheet.write(r=2, c=0, label="Hello 3", style=formatting)

6.数字格式化(使用Excel的格式化字符串)

number_format = xlwt.easyxf(num_format_str="0.00")
sheet.write(3, 0, 3.3333, number_format)

7.日期格式化(使用Excel的格式化字符串)

date_format = xlwt.easyxf(num_format_str="mm/dd/yyyy")
sheet.write(4, 0, dt.datetime(2012, 2, 3), date_format)

8.使用公式

sheet.write(5, 0, xlwt.Formula("SUM(A4, 2)"))

9.二维列表(使用excel模块)

data = [[None, "North", "South"],
 ["Last Year", 2, 5],
 ["This Year", 3, 6]]
excel.write(sheet, data, "A10")

10.图片(只支持添加bmp格式的图片)

sheet.insert_bitmap("images/python.bmp", 0, 2)

11.将文件写入磁盘

book.save("xlwt.xls")


四 如何使用 xlutils 编辑文件

工作表通过 xlrd 读取包含格式在内的文件内容(将 formatting_info 的参数设置为 True),然后

再通过 xlwt 将其间做出的更改写入文件。

补充:formatting_info参数

formatting_info参数是一个可选参数,它用于指示在打开Excel文件时是否加载格式信息。

formatting_info=True时,xlrd会尝试读取并加载Excel文件中的格式信息,如字体、颜色、边框、对齐方式等。这可能会增加内存消耗,因为需要存储更多的格式数据。

formatting_info=False时,xlrd不会加载格式信息,只读取数据内容。这通常可以节省内存,并且对于只需要数据而不需要格式的应用场景来说足够了。

import xlutils.copy
book = xlrd.open_workbook("xl/stores.xls", formatting_info=True)
book = xlutils.copy.copy(book)
book.get_sheet(0).write(0, 0, "changed!")
book.save("stores_edited.xls")

book = xlutils.copy.copy(book):使用 xlutils.copy 模块的 copy 函数复制由 xlrd 打开的工作簿。这一步是必要的,因为xlrd打开的工作簿是只读的,而 xlutils.copy 提供了一个可写的工作簿副本。

book.get_sheet(0).write(0, 0, "changed!"):修改第一个工作表(索引为0)的第一个单元格(行0,列0)的内容为"changed!"。

book.save("stores_edited.xls"):尝试保存修改后的工作簿到名为 stores_edited.xls的文件。

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

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

相关文章

企业微信群聊机器人开发

拿到机器人hook 机器人开发文档 https://developer.work.weixin.qq.com/document/path/91770

基于Python的tkinter开发的一个工具,解析图片文件名并将数据自动化导出为Excel文件

文章目录 一、开发背景与业务价值二、系统架构设计1. 分层架构图解2. 核心类结构3. 文件解析流程 三、关键技术实现详解1. 高性能文件名解析引擎2. 可视化数据展示3. 智能Excel导出模块 四、完整代码五、行业应用展望 一、开发背景与业务价值 在零售行业会员管理场景中&#x…

Flutter_学习记录_状态管理之GetX

1. 状态管理、Flutter Getx介绍 1.1 状态管理 通俗的讲:当我们想在多个页面(组件/Widget)之间共享状态(数据),或者一个页面(组件/Widget)中的多个子组件之间共享状态(数…

【网络】数据流(Data Workflow)Routes(路由)、Controllers(控制器)、Models(模型) 和 Middleware(中间件)

在图片中,数据流(Data Workflow)描述了应用程序中数据的流动过程,涉及 Routes(路由)、Controllers(控制器)、Models(模型) 和 Middleware(中间件&…

Git下载安装(保姆教程)

目录 1、Git下载 2、Git安装(windows版) (1)启动安装程序 (2)阅读许可协议 (3)选择安装路径 (4)选择组件 (5)选择开始菜单文件夹…

Blender-MCP服务源码2-依赖分析

Blender-MCP服务源码2-依赖分析 有个大佬做了一个Blender-MCP源码,第一次提交代码是【2025年3月7号】今天是【2025年月15日】也就是刚过去一周的时间,所以想从0开始学习这个代码,了解一下大佬们的开发思路 1-核心知识点 from mcp.server.fas…

LabVIEW压比调节器动态试验台

本案介绍了一种基于LabVIEW的压比调节器动态试验台的设计,通过实用的LabVIEW图形化编程语言,优化了数据采集与处理的整个流程。案例通过实际应用展示了设计的专业性与高效性,以及如何通过系统化的方法实现精确的动态测试和结果分析。 ​ 项目…

2025-03-17 Unity 网络基础1——网络基本概念

文章目录 1 网络1.1 局域网1.2 以太网1.3 城域网1.4 广域网1.5 互联网(因特网)1.6 万维网1.7 小结 2 IP 地址2.1 IP 地址2.2 端口号2.3 Mac 地址2.4 小结 3 客户端与服务端3.1 客户端3.2 服务端3.3 网络游戏中的客户端与服务端 1 网络 ​ 在没有网络之前…

springboot441-基于SpringBoot的校园自助交易系统(源码+数据库+纯前后端分离+部署讲解等)

💕💕作者: 爱笑学姐 💕💕个人简介:十年Java,Python美女程序员一枚,精通计算机专业前后端各类框架。 💕💕各类成品Java毕设 。javaweb,ssm&#xf…

浅谈数据分析及数据思维

目录 一、数据分析及数据分析思维?1.1 数据分析的本质1.2 数据分析思维的本质1.2.1 拥有数据思维的具体表现1.2.2 如何培养自己的数据思维1.2.2.1 书籍1.2.2.2 借助工具1.2.2.3 刻意练习 二、数据分析的价值及必备能力?2.1 数据分析的价值2.1.1 现状分析…

自定义uniapp组件,以picker组件为例

编写目的 本文说明基于vue3定义uniapp组件的关键点: 1、一般定义在components文件夹创建组件,组件与页面已经没有明确的语法格式区别,所以可以与页面的语法保持一致 ; 2、组件定义后使用该组件的页面不需要引用组件即可使用&am…

【操作系统安全】任务4:Windows 系统网络安全实践里常用 DOS 命令

目录 一、引言 二、网络信息收集类命令 2.1 ipconfig 命令 2.1.1 功能概述 2.1.2 实例与代码 2.2 ping 命令 2.2.1 功能概述 2.2.2 实例与代码 2.3 tracert 命令 2.3.1 功能概述 2.3.2 实例与代码 三、网络连接与端口管理类命令 3.1 netstat 命令 3.1.1 功能概述…

【从零开始学习计算机科学】信息安全(二)物理安全

【从零开始学习计算机科学】信息安全(二)物理安全 物理安全物理安全的涵义物理安全威胁常见物理安全问题物理安全需求规划物理安全需求设备安全防盗和防毁机房门禁系统机房入侵检测和报警系统防电磁泄漏防窃听设备管理设备维护设备的处置和重复利用设备的转移电源安全电源调整…

LeetCode hot 100—验证二叉搜索树

题目 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例 示例 1&#…

MongoDB 可观测性最佳实践

MongoDB 介绍 MongoDB 是一个高性能、开源的 NoSQL 数据库,它采用灵活的文档数据模型,非常适合处理大规模的分布式数据。MongoDB 的文档存储方式使得数据结构可以随需求变化而变化,提供了极高的灵活性。它支持丰富的查询语言,允许…

论文阅读笔记——LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

LoRA 论文 传统全面微调&#xff0c;对每个任务学习的参数与原始模型相同&#xff1a; m a x Φ ∑ ( x , y ) ∈ Z ∑ t 1 ∣ y ∣ l o g ( P Φ ( y t ∣ x , y < t ) ) 式(1) max_{\Phi}\sum_{(x,y)\in Z}\sum^{|y|}_{t1}log(P_{\Phi}(y_t|x,y<t)) \qquad \text{式(…

UE5中 Character、PlayerController、PlayerState、GameMode和GameState核心类之间的联动和分工·

1. GameMode 与 GameState 关系描述 GameMode&#xff1a;定义游戏规则和逻辑&#xff0c;控制游戏的开始、进行和结束。GameState&#xff1a;存储和同步全局游戏状态&#xff0c;如得分、时间、胜利条件等。 联动方式 GameMode初始化GameState&#xff1a;GameMode在游戏…

Ubuntu24.04 启动后突然进入tty,无法进入图形界面

问题描述 昨晚在编译 Android AOSP 14 后&#xff0c;进入了登录页面&#xff0c;但出现了无法输入密码的情况&#xff0c;且无法正常关机&#xff0c;只能强制重启。重启后&#xff0c;系统只能进入 TTY 页面&#xff0c;无法进入图形界面。 问题排查 经过初步排查&#x…

搭建主从服务器

任务需求 客户端通过访问 www.nihao.com 后&#xff0c;能够通过 dns 域名解析&#xff0c;访问到 nginx 服务中由 nfs 共享的首页文件&#xff0c;内容为&#xff1a;Very good, you have successfully set up the system. 各个主机能够实现时间同步&#xff0c;并且都开启防…

jenkins 配置邮件问题整理

版本&#xff1a;Jenkins 2.492.1 插件&#xff1a; A.jenkins自带的&#xff0c; B.安装功能强大的插件 配置流程&#xff1a; 1. jenkins->系统配置->Jenkins Location 此处的”系统管理员邮件地址“&#xff0c;是配置之后发件人的email。 2.配置系统自带的邮件A…