【Python】操作Excel文件

文章目录


前言

本文主要介绍了如何使用Python程序操作excel。


一、安装xlrd库

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

安装命令为

python 复制代码
pip install xlrd==1.2.0

注意:由于最新版xlrd删除了对xlsx格式文件的支持,而我们接下来要以读取xlsx文件来演示xlrd模块,因此在安装时指明了版本号(不指定版本号,会默认安装最新版本)。

二、操作Excel文件

1. 打开Execl文件并读取内容

open_workbook函数

使用xlrd模块中的open_workbook函数可以打开指定的Execl文件。

python 复制代码
import xlrd
data = xlrd.open_workbook('filedir/file.xlsx')

open_workbook函数返回的是一个book对象,该对象代表的是被打开的Excel文件。

如果要打开的xlsx文件和当前的Python程序在同一目录下,我们可以通过如下方式获取Excel文件的路径:

  • 使用os.path模块中的abspath函数获取到Python程序所在的绝对路径;
  • 再使用os.path模块中的dirname函数获取到Python程序所在的目录的绝对路径;
  • 最后使用os.path模块中的join函数将Python程序所在的目录路径与Excel文件的文件名拼接起来,即可得到Excel文件的路径。

在需要打开Excel文件时,将获得的路径传入open_workbook函数。

python 复制代码
import xlrd
import os
file_path = os.path.abspath(__file__)
base_path = os.path.dirname(file_path)
test_path = os.path.join(file_path, 'test.xlsx')
data = xlrd.open_workbook(test_path)

2. 获取指定工作表

工作表是指Excel文件中的Sheet,一个Sheet就是一个工作表。

获取某个Sheet,是指获取某个Excel文件的Sheet,因此获取Sheet的函数都是book对象的成员函数,得用book对象来调用。

sheets函数

sheets函数可以获取Book对象中所有的工作表。这些工作表是以列表的形式进行返回的,可以通过索引的方式来获取指定工作表。

python 复制代码
table = data.sheets()[0] # 获取Sheet1工作表

注意:

Sheet1的索引为0,Sheet2的索引为1,以此类推。

sheet_by_index函数

sheet_by_index函数可以通过索引的方式来获取指定sheet表格。

python 复制代码
table = data.sheet_by_index(1) # 获取Sheet2工作表

Sheet_by_index函数所用的索引和列表的索引规则相同。

sheet_by_name函数

sheet_by_name函数可以通过sheet表格名来获取指定sheet表格。

python 复制代码
table = data.sheet_by_name('Sheet1') # 获取Sheet1工作表

sheet_names函数

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

python 复制代码
print(data.sheet_names()) # [Sheet1, Sheet2, Sheet3]

sheet_loaded函数

sheet_loaded函数可以查询某个工作表是否导入完毕。

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

注意:
Sheet_loaded函数检查工作表是否导入完毕时,支持传入工作表索引,也支持传入工作表名。

3. 操作指定行

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

nrows成员变量

nrows成员变量可以获取工作表中的行数。

python 复制代码
nrows = table.nrows # 获取工作表中的行数

row函数

row函数可以获取指定行的所有单元格对象(以列表形式返回)。

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

row_slice函数

row_slice函数可以获取指定行的指定起始位置到指定终止位置的单元格对象(以列表形式返回)。

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

注意:

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

row_types函数

row_types函数可以获取指定行的所有单元格对象的数据类型(以列表的形式返回)。

python 复制代码
print(table.row_types(0, start_colx=0, end_colx=None)) # 获取第0行所有单元格的数据类型(以列表的形式返回)

注意:

Python读取Excel单元格数据的类型有以下几种,row_types函数返回的是类型的对应值

类型 对应值
XL_CELL_EMPTY 0
XL_CELL_TEXT 1
XL_CELL_NUMBER 2
XL_CELL_DATE 3
XL_CELL_BOOLEAN 4
XL_CELL_ERROR 5
XL_CELL_BLANK 6

row_values函数

row_valuse函数可以获取指定行的所有单元格对象的数据值(以列表的形式返回)。

python 复制代码
print(table.row_values(0, start_colx=0, end_colx=None)) # 获取第0行所有单元格数据的值(以列表形式返回)

row_len函数

row_len函数可以获取指定行的有效单元格对象个数。

python 复制代码
print(table.row_len(o)) # 获取第0行有效单元格对象的个数

4. 操作指定列

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

4.1 ncols成员变量

ncols成员变量可以获取工作表的列数。

python 复制代码
print(table.ncols) # 获取工作表的列数

4.2 col函数

col函数可以获取工作表中指定列的所有单元格对象(以列表形式返回)。

python 复制代码
print(table.col(0)) # 获取第0列的所有单元格对象(以列表形式返回)

4.3 col_silce函数

col_silce函数可以获取工作表中指定列指定起始行start_rowx到指定结束行end_rowx之间(左闭右开)的所有单元格对象(以列表形式返回)。

python 复制代码
print(table.col_silce(0, start_rowx=0, end_rowx=None)) # 获取第0列的所有单元格对象(以列表的形式返回)

4.3 col_types函数

col_types函数可以获取工作表中指定列指定起始行start_rowx到指定结束行end_rowx之间(左闭右开)的所有单元格对象的数据类型(以列表形式返回)。

python 复制代码
print(table.col_types(0, start_rowx=0, end_rowx=None)) # 获取第0列的所有单元格对象的数据类型(以列表的形式返回)

4.4 col_values函数

col_values函数可以获取工作表中指定列起始行start_rowx到结束行end_rowx之间(左闭右开)的所有单元格对象的数据值(以列表形式返回)。

python 复制代码
print(table.col_values(0, start_rowx=0, end_rowx=None)) # 获取第0列的所有单元格对象的值(以列表的形式返回)

5. 操作指定单元格

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

5.1 cell函数

使用cell函数可以获取指定单元格的对象。

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

5.2 cell_type函数

使用cell_type函数可以获取指定单元格对象的数据类型。

python 复制代码
print(table.cell_type(0, 1)) # 获取第0行第1列的单元格对象的数据类型

5.3 cell_value函数

使用cell_value函数可以获取指定单元格对象的数据值。

python 复制代码
print(table.cell_value(0, 1)) # 获取第0行第1列的单元格对象的数据值

三、使用示例

根据学生成绩单.xlsx,求出3班数学成绩的平均分,工作表数据如下:

步骤:

  1. 使用open_workbook函数打开该Excel文件;

  2. 使用Sheet_by_index获取Sheet1工作表;

  3. 使用nrows函数获取Sheet1工作表的行数;

  4. 使用for循环遍历Sheet1工作表的每一行,通过cell_value函数获取指定行第1列的数据值,判断是否为3班。如果是3班的,则使用row_values函数获取指定行第3行的数据值并添加到total,并使用count统计3班的学生个数;

  5. 表格遍历结束后,用total/count就能得到3班学生的数学成绩的平均分。

python 复制代码
import xlrd
import os
#打开Execl文件读取
file_path = os.path.abspath(__file__)
base_path = os.path.dirname(file_path)
test_file = os.path.join(base_path, '学生成绩单.xlsx')
with xlrd.open_workbook(test_file) as data:
    #获取指定工作表
    table = data.sheet_by_index(0)
    #求三班数学成绩平均分
    nrows = table.nrows
    total = 0
    count = 1
    for i in range(1, nrows):
        if int(table.cell_value(i, 1)) == 3:
            count += 1
            total += int(table.cell_value(i, 3))
    print(f'三班数学成绩平均分为:{total/count}')

运行结果如下:


总结

以上就是今天要讲的内容,本文介绍了如何使用Python代码来对Excel文件进行操作。本文作者目前也是正在学习Python相关的知识,如果文章中的内容有错误或者不严谨的部分,欢迎大家在评论区指出,也欢迎大家在评论区提问、交流。

最后,如果本篇文章对你有所启发的话,希望可以多多支持作者,谢谢大家!

相关推荐
宸津-代码粉碎机3 分钟前
Java面试核心:JVM三大GC垃圾回收算法原理与生产场景落地分析
java·大数据·人工智能·python·spring
小静AI工程实验室10 分钟前
Codex 实用教程:Windows、macOS、Linux 安装配置到首个可验收项目
人工智能·python·开发工具·codex
黑马水牛26 分钟前
Carla仿真系列:17_利用Carla仿真环境跑通3DGS——从采集360张图到高斯泼溅建模
python·ros·colmap·3dgs·新视角合成·carla仿真·三维建图
赵大仁2 小时前
极空间 NAS 没有命令行,我逆向了它的桌面客户端
python·ai编程·nas·mcp·极空间
空白2 小时前
Power BI +VBA 【数据分析】
python
科技苑8 小时前
Python简单网络爬虫教程
爬虫·python
Patrick在香港11 小时前
Claude Prompt 香港场景:公文里「今日」落在 6 个日历日上,「翌日」锚错了 5 天
python·自然语言处理·正则表达式·claude·数据清洗
YsyaaabB12 小时前
Python 数值分析
python
阿洛学长12 小时前
计算机二级 Python 基本操作题(15 分)真题笔记(0101 ~ 1903 全套)
python·pycharm
weixin1997010801612 小时前
[特殊字符]️《二手ERP对接电商平台的总体方案:统一数据模型 + 事件驱动 + 灰度上线6原则》(附Python源码)
大数据·python