每日一包 - xlrd

225 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情

介绍

本文主要介绍xlrd,该模块主要用来对xlsx、xls、xlsm文件进行读操作且效率高,前面有文章介绍了openpyxl,也是操作excel文件的模块,这里简单的对比一下这两个模块:

  • openyxl:可以对xlsx、xlsm文件进行读、写操作,主要对Excel2007年之后的版本(.xlsx)
  • xlrd:可以对xlsx、xls、xlsm文件进行读操作且效率高

通过对比可以看到,在效率上来讲,xlrd要比openpyxl高效。xlrd是用来从Excel中读写数据的,但我们通常只用它进行读操作,写操作会相对于专门写入的模块麻烦一些。

安装和使用

安装

pip install Xlrd=1.2.0

使用

首先需要先准备一个excel文件,文件数据如下:

image-20220620163748405.png

用xlrd进行读取比较方便,流程和平常手动操作Excel一样,打开工作簿(Workbook),选择工作表(sheets),然后操作单元格(cell)

首先需要打开工作簿:

import xlrd
# filename文件的路径,可以是相对路径也可以是绝对路径
df = xlrd.open_workbook(filename) 
print(df)  # <xlrd.book.Book object at 0x00000224E7EE2CD0>

查看工作簿中所有的sheet,得到的是一个列表。

print(df.sheet_names())  # ['test']

当一个excel文件中有多个sheet时,可以选择其中的某一个sheet。

# 根据列表索引获取某一个sheet
table=df.sheets()[0]  #列表是从0开始计数# 通过索引获取第一个工作表,这里的索引与pandas中DataFrame的index索引类似,只不过对象换成了工作表。
table=df.sheet_by_index(0)
# 通过表的名称选择工作表,如果工作表是有自己的名字的,那么这个读取方式是最方便的。
table=df.sheet_by_name('name')

获取表格的行数和列数,注意这两个不是方法而是数据属性

row=table.nrows
col=table.ncols

也可以获取整行或者整列的数据:

# row_values:获取行数据,num1指选取的行数是多少,例如我们选取第一行所有字段名称数据,那么这个num1就是0。
table.row_values(num1)
​
# column_values:获取列数据,参数num2就是获取第几列数据
table.column_values(num2)

也可以通过循环获取表格的所有行:

for i in range(table.nrows):
   print (table.row_values(i))  # ['name', 'age']

也可以获取某一个单元格的值,共有三种方式:

# 获取单元格值的方式是通过调取指定行数据进行筛选。
cell1=table.row(0)[0].value
# 以二维的形式获取,即(第i行,第j列)形式。
cell1=table.cell(0,0).value
# 与第一行类似是通过列索引调用。
cell1=table.col(0)[0].value

总结

上述文章总结了如何使用xlrd模块对excel文件进行读操作,至于在日常开发中是使用xlrd还是使用`openpyxl就根据实际情况和需要的效率来决定。