知识周汇 | Python操作Excel全攻略系列(一):模块详解篇

目录

系列文章

前言

1 知识概览

2 模块详解

2.1 openpyxl

2.2 pandas

2.3 xlrd

2.4 xlwt

2.5 xlsxwriter

2.6 xlwing

3 后续


系列文章

知识周汇 | Python操作Excel全攻略系列(二):文件操作篇

知识周汇 | Python操作Excel全攻略系列(三):sheet操作篇

前言

作为现代职场不可或缺的利器,Excel以其卓越的数据处理能力,稳居办公软件使用率之首。无论是面对海量数据的深度分析与整理,还是实现业务信息的系统化收集与管理,亦或是打造专业精准的报表体系,Excel始终扮演着无可替代的关键角色。本系列教程旨在系统化地讲解Python操作Excel的核心技能,精心规划为五大专题:模块详解篇、文件操作篇、工作表掌控篇、数据处理篇以及格式美化篇。

1 知识概览

工作簿(Workbook):Excel的最高层级文件,文件扩展名为.xlsx或.xls,包含一个或多个工作表,可存储数据、公式、图表等

工作表(Sheet/Worksheet):工作簿中的单个页面,由行列组成的网格,可重命名、添加、删除,默认名称Sheet1、Sheet2等

单元格(Cell):行列交叉形成的单个格子,数据存储的基本单位,由列标和行号定位(如A1),输入数据、公式等

列(Column):垂直方向的单元格集合,用字母标识(A、B、...、Z、AA、AB等),共16,384列(Excel 2007及以上)

行(Row):水平方向的单元格集合,用数字标识(1、2、3...),共1,048,576行(Excel 2007及以上)

 处理excel表的模块主要有以下几个:

  1. openpyxl:适用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件。提供了丰富的API来操作Excel文件,包括读取、写入、修改单元格内容、样式设置等。感兴趣可以读一下英文文档openpyxl英文文档

  2. pandas:这个库是一个超级强大的数据分析库,通过read_excel()to_excel()方法,可以轻松地将Excel文件读取为DataFrame或将DataFrame写入Excel文件。pandas英文文档

  3. xlrd:用于读取Excel文件(支持xls和xlsx格式)。注意:xlrd 2.0.0及以上版本不再支持xlsx文件的读取,如果需要读取xlsx文件,建议使用openpyxl或pandas。xlrd英文文档

  4. xlwt:用于写入Excel文件(仅支持xls格式)。提供了创建和修改Excel文件的功能,但不支持xlsx格式。xlwt英文文档

  5. xlsxwriter:用于创建和写入Excel文件(支持xlsx格式)。提供了丰富的功能,包括格式化、图表、公式等,但不支持读取Excel文件。xlsxwriter英文文档

  6. xlwing: 是一个 Python 库,用于与 Excel 文件交互、自动化 Excel 任务,并实现 Python 与 Excel 的无缝集成。xlwing英文文档

2 模块详解

以下内容均摘录自相关英文文献,并附有简要解读,旨在为读者提供基础概念,需要详细了解还需要读取英文文档

2.1 openpyxl

from openpyxl import Workbook
wb = Workbook()# grab the active worksheet
ws = wb.active# Data can be assigned directly to cells
ws['A1'] = 42# Rows can also be appended
ws.append([1, 2, 3])# Python types will automatically be converted
import datetime
ws['A3'] = datetime.datetime.now()# Save the file
wb.save("sample.xlsx")

输出结果

2.1.1 导入 Workbook 类

from openpyxl import Workbook
  • openpyxl 是一个用于读写 Excel 文件的 Python 库。

  • Workbook 是 openpyxl 中的一个类,用于创建一个新的 Excel 工作簿。

2.1.2 创建一个新的工作簿

wb = Workbook()
  • Workbook() 创建一个新的 Excel 工作簿对象,并将其赋值给变量 wb

  • 默认情况下,新工作簿会包含一个名为 Sheet 的工作表。

2.1.3 获取活动工作表

ws = wb.active
  • wb.active 返回当前活动的工作表(即默认创建的第一个工作表)。

  • 将其赋值给变量 ws,以便后续操作。

2.1.4 直接向单元格赋值

ws['A1'] = 42
  • 将值 42 写入工作表的 A1 单元格。

  • Excel 单元格可以通过类似 A1 的坐标直接访问。

2.1.5 追加一行数据

ws.append([1, 2, 3])
  • append() 方法用于在工作表的末尾追加一行数据。

  • 这里追加了一个包含 [1, 2, 3] 的列表,数据会依次写入当前行的第一、第二和第三列。

2.1.6 自动转换 Python 类型

import datetime
ws['A2'] = datetime.datetime.now()
  • 导入 datetime 模块,用于获取当前时间。

  • datetime.datetime.now() 返回当前的日期和时间。

  • 将该值写入 A2 单元格。openpyxl 会自动将 Python 的 datetime 对象转换为 Excel 支持的日期时间格式。

2.1.7 保存文件

wb.save("sample.xlsx")
  • save() 方法将工作簿保存为指定的文件名(这里是 sample.xlsx)。

  • 如果文件已存在,则会覆盖;如果不存在,则会创建新文件。

2.2 pandas

pd.read_excel('tmp.xlsx')

读取excel表,pd.read_excel():这是 pandas 库中用于读取 Excel 文件的函数。它可以将 Excel 文件的内容加载为一个 DataFrame。'tmp.xlsx':这是要读取的 Excel 文件的路径。文件名为 tmp.xlsx,假设它与代码在同一目录下。pandas是一个很强大的数据分析模块,需要了解掌握建议可以读一下它的英文文档或者相关书籍。

    2.3 xlrd

    import xlrd
    book = xlrd.open_workbook("sample.xls")
    print("The number of worksheets is {0}".format(book.nsheets))
    print("Worksheet name(s): {0}".format(book.sheet_names()))
    sh = book.sheet_by_index(0)
    print("{0} {1} {2}".format(sh.name, sh.nrows, sh.ncols))
    print("Cell D30 is {0}".format(sh.cell_value(rowx=1, colx=2)))
    for rx in range(sh.nrows):print(sh.row(rx))

    输出结果示例:

    2.3.1 导入 xlrd 库

    import xlrd
    • xlrd 是一个用于读取 Excel 文件的 Python 库,支持 .xls 格式(旧版 Excel 文件)。

    • 注意:xlrd 从 2.0.0 版本开始不再支持 .xlsx 格式,如果需要读取 .xlsx 文件,可以使用 openpyxl 或 pandas

    2.3.2 打开 Excel 文件

    book = xlrd.open_workbook("sample.xls")
    • xlrd.open_workbook() 打开指定的 Excel 文件(这里是 sample.xls),并返回一个 Book 对象。

    • Book 对象表示整个 Excel 文件,包含所有工作表和数据。

    2.3.3 打印工作表的数量

    print("The number of worksheets is {0}".format(book.nsheets))
    • book.nsheets 返回 Excel 文件中工作表的数量。

    • 使用 format() 方法将数量插入到输出字符串中。

    2.3.4 打印工作表的名称

    print("Worksheet name(s): {0}".format(book.sheet_names()))
    • book.sheet_names() 返回一个列表,包含所有工作表的名称。

    • 使用 format() 方法将工作表名称列表插入到输出字符串中。

    2.3.5 获取第一个工作表

    sh = book.sheet_by_index(0)
    • book.sheet_by_index(0) 根据索引获取第一个工作表(索引从 0 开始)。

    • 返回一个 Sheet 对象,表示该工作表。

    2.3.6 打印工作表的基本信息

    print("{0} {1} {2}".format(sh.name, sh.nrows, sh.ncols))
    • sh.name:工作表的名称。

    • sh.nrows:工作表的行数。

    • sh.ncols:工作表的列数。

    • 使用 format() 方法将这些信息插入到输出字符串中。

    2.3.7 读取特定单元格的值

    print("Cell D30 is {0}".format(sh.cell_value(rowx=1, colx=2)))
    • sh.cell_value(rowx=1, colx=2) 读取指定单元格的值。

      • rowx=1:行索引(从 0 开始,所以 1 表示第二行)。

      • colx=2:列索引(从 0 开始,所以 2 表示第三列,即 C 列)。

    • 注意:这里代码中的注释是 Cell D30,但实际读取的是 C2 单元格的值(因为 rowx=1, colx=2 对应的是第二行第三列)。

    2.3.8 遍历工作表的每一行

    for rx in range(sh.nrows):print(sh.row(rx))
    • sh.nrows 是工作表的行数。

    • sh.row(rx) 返回指定行的所有单元格数据,以列表形式返回。

    • 使用 for 循环遍历每一行,并打印该行的数据。

    2.4 xlwt

    import xlwt# Create a workbook
    workbook = xlwt.Workbook()# Add a sheet
    sheet = workbook.add_sheet('Sheet1')# Write data
    sheet.write(0, 0, 'Name')
    sheet.write(0, 1, 'Age')
    sheet.write(1, 0, 'Alice')
    sheet.write(1, 1, 30)
    sheet.write(2, 0, 'Bob')
    sheet.write(2, 1, 25)# Save the workbook
    workbook.save('example.xls')

    运行结果:

    2.4.1 导入 xlwt 库

    import xlwt
    • xlwt 是一个用于创建和写入 Excel 文件的 Python 库,支持 .xls 格式(旧版 Excel 文件)。

    • 注意:xlwt 不支持 .xlsx 格式,如果需要创建 .xlsx 文件,可以使用 openpyxl 或 pandas

    2.4.2 创建一个工作簿

    workbook = xlwt.Workbook()
    • xlwt.Workbook() 创建一个新的 Excel 工作簿对象,并将其赋值给变量 workbook

    • 工作簿是 Excel 文件的顶层容器,可以包含多个工作表。

    2.4.3 添加一个工作表

    sheet = workbook.add_sheet('Sheet1')
    • workbook.add_sheet('Sheet1') 在工作簿中添加一个名为 Sheet1 的工作表。

    • 返回一个 Worksheet 对象,表示该工作表,并将其赋值给变量 sheet

    2.4.4 写入数据

    sheet.write(0, 0, 'Name')
    sheet.write(0, 1, 'Age')
    sheet.write(1, 0, 'Alice')
    sheet.write(1, 1, 30)
    sheet.write(2, 0, 'Bob')
    sheet.write(2, 1, 25)
    • sheet.write(row, col, value) 用于向工作表的指定单元格写入数据。

      • row:行索引(从 0 开始)。

      • col:列索引(从 0 开始)。

      • value:要写入的值(可以是字符串、数字等)。

    • 代码中写入的数据如下:

      • 第一行:A1 单元格写入 NameB1 单元格写入 Age

      • 第二行:A2 单元格写入 AliceB2 单元格写入 30

      • 第三行:A3 单元格写入 BobB3 单元格写入 25

    2.4.5 保存工作簿

    workbook.save('example.xls')
    • workbook.save('example.xls') 将工作簿保存为指定的文件名(这里是 example.xls)。

    • 如果文件已存在,则会覆盖;如果不存在,则会创建新文件。

    2.5 xlsxwriter

    import xlsxwriterworkbook = xlsxwriter.Workbook('hello.xlsx')
    worksheet = workbook.add_worksheet()worksheet.write('A1', 'Hello world')workbook.close()

    运行结果:

    2.5.1 导入 xlsxwriter 库

    import xlsxwriter
    • xlsxwriter 是一个用于创建和写入 Excel 文件的 Python 库,支持 .xlsx 格式(新版 Excel 文件)。

    • 它提供了丰富的功能,如设置单元格样式、添加图表、公式等。

    2.5.2 创建一个工作簿

    workbook = xlsxwriter.Workbook('hello.xlsx')
    • xlsxwriter.Workbook('hello.xlsx') 创建一个新的 Excel 工作簿对象,并将其赋值给变量 workbook

    • 参数 'hello.xlsx' 是保存文件的路径和名称。

    • 如果文件已存在,则会被覆盖;如果不存在,则会创建新文件。

    2.5.3 添加一个工作表

    worksheet = workbook.add_worksheet()
    • workbook.add_worksheet() 在工作簿中添加一个新的工作表。

    • 默认情况下,工作表的名称为 Sheet1,但可以通过传递参数指定名称,例如:

      worksheet = workbook.add_worksheet('MySheet')
    • 返回一个 Worksheet 对象,表示该工作表,并将其赋值给变量 worksheet

    2.5.4 向单元格写入数据

    worksheet.write('A1', 'Hello world')
    • worksheet.write('A1', 'Hello world') 向工作表的 A1 单元格写入字符串 Hello world

    • write() 方法的第一个参数是单元格的坐标(如 A1),第二个参数是要写入的值(可以是字符串、数字、公式等)。

    2.5.5 关闭工作簿

    workbook.close()
    • workbook.close() 关闭工作簿并保存文件。

    • 在 xlsxwriter 中,必须显式调用 close() 方法,否则文件可能无法正确保存。

    2.6 xlwing

    import xlwings as xwwb = xw.Book('FileName.xlsx')  # connect to a file that is open or in the current working directorysheet = wb.sheets['Sheet']
    sheet['A1'].value = 'Foo 1'wb.save()
    wb.close()
    

    运行结果:

    2.6.1 导入 xlwings 库

    import xlwings as xw
    • xlwings 是一个用于与 Excel 交互的 Python 库,支持 .xlsx 和 .xls 格式。

    • 它允许 Python 代码与 Excel 文件进行双向交互(读取和写入)。

    2.6.2 连接到 Excel 文件

    wb = xw.Book('FileName.xlsx')
    • xw.Book('FileName.xlsx') 打开指定的 Excel 文件(这里是 FileName.xlsx),并返回一个 Book 对象。

    • 如果文件已打开,xlwings 会直接连接到已打开的文件;如果文件未打开,则会从当前工作目录中加载文件。

    • 如果文件不存在,会抛出错误。

    2.6.3 获取工作表

    sheet = wb.sheets['Sheet']
    • wb.sheets['Sheet'] 获取工作簿中名为 Sheet 的工作表。

    • 返回一个 Sheet 对象,表示该工作表,并将其赋值给变量 sheet

    2.6.4 向单元格写入数据

    sheet['A1'].value = 'Foo 1'
    • sheet['A1'].value = 'Foo 1' 向工作表的 A1 单元格写入字符串 Foo 1

    • value 属性用于读取或写入单元格的值。

    2.6.5 保存工作簿

    wb.save()
    • wb.save() 保存对工作簿的更改。

    • 如果文件未保存过,则会保存到当前工作目录;如果文件已存在,则会覆盖原文件。

    2.6.6 关闭工作簿

    wb.close()
    • wb.close() 关闭工作簿。

    • 关闭后,Python 与 Excel 文件的连接将断开。

    3 后续

    后续将通过常见案例讲解Excel表的实际应用场景。分享自己的学习感受,尤其是对于非程序员来说,不必过于纠结代码细节,比如为什么是import pandas as pd而不是import pandas as pdx重点在于理解代码的功能,即使不完全明白也没关系,只要能解决工作中的实际问题就足够了。当我们把编程当作工具使用时,不知不觉中就会进步。知识是网状的,不是线性的,随着每个知识点的积累,它们会自然而然地连接起来。

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

    如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    NVIDIA GPU 架构详解:Pascal、Volta、Turing、Ampere、Ada、Hopper、Blackwell

    目录 1. Pascal(帕斯卡)架构(2016)关键技术性能特性代表产品应用场景 2. Volta(伏特)架构(2017)关键技术性能特性代表产品应用场景 3.Turing(图灵)架构&#…

    SpringMVC学习(controller层加载控制与(业务、功能)bean加载控制、Web容器初始化配置类)(3)

    目录 一、SpringMVC、Spring的bean加载控制。 &#xff08;1&#xff09;实际开发的包结构层次。 &#xff08;2&#xff09;如何"精准"控制两个容器分别加载各自bean。(分析) <1>SpringMVC相关bean加载控制。(方法) <2>Spring相关bean加载控制。(方法) …

    通过Docker搭个游戏——疯狂大陆(Pkland)

    最近在研究我的服务器&#xff0c;在服务器上搭了很多docker的项目&#xff0c;然后找着找着发现一个能用Docker配置环境的游戏叫Pkland。 项目地址&#xff1a;GitHub - popkarthb/pkland: 疯狂大陆是一款多人在线的战略游戏。 游戏操作简捷,您仅需要使用浏览器就可以在任何时…

    【SpringBoot】深入解析 Maven 的操作与配置

    Maven 1.什么是Maven? Maven是一个项目管理工具&#xff0c;通过pom.xml文件的配置获取jar包&#xff0c;而不用手动去添加jar包&#xff1b; 2. 创建一个Maven项目 IDEA本身已经集成了Maven&#xff0c;我们可以直接使用&#xff0c;无需安装 以下截图的idea版本为&#xff…

    Cursor + IDEA 双开极速交互

    相信很多开发者朋友应该和我一样吧&#xff0c;都是Cursor和IDEA双开的开发模式:在Cursor中快速编写和生成代码&#xff0c;然后在IDEA中进行调试和优化 在这个双开模式的开发过程中&#xff0c;我就遇到一个说大不大说小不小的问题&#xff1a; 得在两个编辑器之间来回切换查…

    HarmonyOS:如何将图片转为PixelMap并进行图片缓存策略

    前言&#xff1a;在HarmonyOS项目开发中&#xff0c;我们使用Ark-Ts语言开发项目。我们有个功能是拍照&#xff0c;除了正常显示出来&#xff0c;并且上传服务器。我在开发过程中&#xff0c;遇到的问题是&#xff0c;如果离开这个页面再回到当前页面仍要显示图片&#xff0c;那…

    ctf网络安全比赛有一张图片怎么查看

    0102-JavaScript简介&&作用 02简介 JavaScript 是互联网上最流行的脚本语言&#xff0c;这门语言可用于 HTML 和 web&#xff0c;更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。 03作用 JavaScript 是脚本语言 JavaScript 是一种轻量级的编程语…

    搭建一个简单的node服务,模拟后端接口

    目录 一、查看是否安装了node和npm 二、创建一个文件夹&#xff0c;用于放你的node服务代码 三、初始化一个package.json 四、安装 Express&#xff08;快速搭建服务的框架&#xff09; 五、创建serve.js 六、运行服务即可 七、测试接口 法一&#xff1a;使用 curl 法…

    【五.LangChain技术与应用】【31.LangChain ReAct Agent:反应式智能代理的实现】

    一、ReAct Agent是啥?为什么说它比「普通AI」聪明? 想象一下,你让ChatGPT查快递物流,它可能直接编个假单号糊弄你。但换成ReAct Agent,它会先推理(Reasoning)需要调用哪个接口,再行动(Action)查询真实数据——这就是ReAct的核心:让AI学会「动脑子」再动手。 举个真…

    BUUCTF逆向刷题笔记(1-12)

    easyre、内涵的软件、xor、不一样的flag&#xff1a; buuctf reverse部分题解&#xff08;实时更新&#xff09;_reverse 题解-CSDN博客 请见小库里的blog。 reverse1 查壳发现没有&#xff0c;而且是64位 粗略改一下部分函数名&#xff0c;看看主要逻辑。 第一个for循环暂…

    OceanBase-obcp-v3考试资料梳理

    集群架构 基本概念 集群: 集群由一个或多个Region组成,Region 由一个或多个Zone组成,Zone由一个或多个OBServer组成,每个OBServer里有若干个partition的Replica。 Region: 对应物理上的一个城市或地域,当OB集群由多个Region组成时, 数据库的数据和服务能力就具备地域…

    【C++】双指针算法

    我们还有更长的路要走&#xff0c;不过没关系&#xff0c;道路就是生活。 前言 这是我自己学习蓝桥杯算法的第一篇博客总结。后期我会继续把蓝桥杯算法学习笔记开源至博客上。 技巧 1. 双指针算法&#xff0c;但实际上是利用数组下标来充当指针&#xff0c;并不是直接使用指…

    如何使用MyBatis进行多表查询

    前言 在实际开发中&#xff0c;对数据库的操作通常会涉及多张表&#xff0c;MyBatis提供了关联映射&#xff0c;这些关联映射可以很好地处理表与表&#xff0c;对象与对象之间的的关联关系。 一对一查询 步骤&#xff1a; 先确定表的一对一关系确定好实体类&#xff0c;添加关…

    江科大51单片机笔记【9】DS1302实时时钟(上)

    一、DS1302介绍 DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时&#xff0c;且具有闰年补偿等多种功能。RTC&#xff08;Real Time Clock&#xff09;&#xff1a;实时时钟&#xff0c;是一种集成电路…

    【Python项目】基于深度学习的车辆特征分析系统

    【Python项目】基于深度学习的车辆特征分析系统 技术简介&#xff1a;采用Python技术、MySQL数据库、卷积神经网络&#xff08;CNN&#xff09;等实现。 系统简介&#xff1a;该系统基于深度学习技术&#xff0c;特别是卷积神经网络&#xff08;CNN&#xff09;&#xff0c;用…

    汽车智能钥匙中PKE低频天线的作用

    PKE&#xff08;Passive Keyless Entry&#xff09;即被动式无钥匙进入系统&#xff0c;汽车智能钥匙中PKE低频天线在现代汽车的智能功能和安全保障方面发挥着关键作用&#xff0c;以下是其具体作用&#xff1a; 信号交互与身份认证 低频信号接收&#xff1a;当车主靠近车辆时…

    大模型AI平台DeepSeek 眼中的SQL2API平台:QuickAPI、dbapi 和 Magic API 介绍与对比

    目录 1 QuickAPI 介绍 2 dbapi 介绍 3 Magic API 介绍 4 简单对比 5 总结 统一数据服务平台是一种低代码的方式&#xff0c;实现一般是通过SQL能直接生成数据API&#xff0c;同时能对产生的数据API进行全生命周期的管理&#xff0c;典型的SQL2API的实现模式。 以下是针对…

    【CF】C. Tokitsukaze and Two Colorful Tapes+C. Where is the Pizza?

    https://codeforces.com/contest/1677/problem/C https://codeforces.com/contest/1670/problem/C 两道很像的的题目&#xff0c;都和环有关 C. Tokitsukaze and Two Colorful Tapes 题目&#xff1a; 思路&#xff1a; 题意就是给定你两排颜色&#xff0c;要求在相同的颜色…

    leetcode0020 - 有效的括号 easy

    1 题目&#xff1a;有效的括号 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须…

    基于提示驱动的潜在领域泛化的医学图像分类方法(Python实现代码和数据分析)

    摘要 医学图像分析中的深度学习模型易受数据集伪影偏差、相机差异、成像设备差异等导致的分布偏移影响&#xff0c;导致在真实临床环境中诊断不可靠。领域泛化&#xff08;Domain Generalization, DG&#xff09;方法旨在通过多领域训练提升模型在未知领域的性能&#xff0c;但…