【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相关的知识,如果文章中的内容有错误或者不严谨的部分,欢迎大家在评论区指出,也欢迎大家在评论区提问、交流。

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

相关推荐
XLYcmy4 小时前
一个针对医疗RAG系统的数据窃取攻击工具
python·网络安全·ai·llm·agent·rag·ai安全
Islucas4 小时前
Claude code入门保姆级教程
python·bash·claude
萝卜白菜。4 小时前
TongWeb7.0相同的类指明加载顺序
开发语言·python·pycharm
赵钰老师4 小时前
【ADCIRC】基于“python+”潮汐、风驱动循环、风暴潮等海洋水动力模拟实践技术应用
python·信息可视化·数据分析
爬山算法4 小时前
MongoDB(80)如何在MongoDB中使用多文档事务?
数据库·python·mongodb
YuanDaima20485 小时前
基于 LangChain 1.0 的检索增强生成(RAG)实战
人工智能·笔记·python·langchain·个人开发·langgraph
RopenYuan6 小时前
FastAPI -API Router的应用
前端·网络·python
听风吹等浪起6 小时前
用Python和Pygame从零实现坦克大战
开发语言·python·pygame