Python xlrd 读取 Excel 表格基础 一:按行、按列读取Excel数据内容

    • 前言:
    • 1、获取工作簿、sheet对象
    • 2、获取sheet表中行、列对象
    • 3、读取sheet对象中所有数据
    • 4、按行读取Excel文件所有sheet表数据
    • 结尾:
  • 【Python与Office】专栏

前言:

前面已经介绍了Python 第三方模块xlwt,将数据写入Excel表格的基础操作。从这篇博客开始来介绍 xlrd 模块读取 Excel 表格数据内容的操作。

本篇主要内容为:

1、获取工作簿、sheet表对象;
2、获取sheet表中行对象,列对象;
3、获取sheet表中所有数据;
4、获取工作簿对象所有sheet表数据。

1、获取工作簿、sheet对象

在CSDN创作中心的数据数据详情中下载了一个Excel表格文件,然后做成了两个sheet表,文件截图如下:
sheet1 截图:

Sheet2 截图:

获取工作簿文件对象(打开文件):

# 导入模块
import xlrd# 打开文件方式1:
work_book = xlrd.open_workbook('test01.xls')
# 方式2:
w2 = xlrd.book.open_workbook_xls('表02.xls')

以上两种方式都可以获取 xls 格式的Excel文件对象,其实也都是在 xlrd 中创建了Book 对象,推荐第一种打开方式,操作更简单。

获取工作簿对象属性:

# 获取工作簿中sheet表数量
print(work_book.nsheets)
# 打印结果:
# 2# 获取工作簿中所有sheet表对象
sheets = work_book.sheets()
print(sheets)
# ------运行结果------
# [<xlrd.sheet.Sheet object at 0x0000025838B69E80>,
# <xlrd.sheet.Sheet object at 0x0000025838B69E48>]
# ------运行结果------# 获取工作簿所有sheet表对象名称
sheets_name = work_book.sheet_names()
print(sheets_name)
# ------运行结果------
# ['sheet1', 'Sheet2']
# ------运行结果------

按索引、名称获取sheet表对象:

# 按索引获取sheet对象
sheet_1 = work_book.sheet_by_index(0)
print(sheet_1)
# ------运行结果------
# <xlrd.sheet.Sheet object at 0x000001CE3473C550>
# ------运行结果------# 按sheet表名称获取sheet对象,名称分大小写
sheet_2 = work_book.sheet_by_name('Sheet2')
print(sheet_2)
# ------运行结果------
# <xlrd.sheet.Sheet object at 0x000001C6A5B7C710>
# ------运行结果------

2、获取sheet表中行、列对象

获取单元格对象及属性:

# 获取sheet表单元格对象,单元格数据类型:单元格值
cell_0 = sheet_1.cell(0,0)
print(cell_0)
# ------运行结果------
# text:'日期'
# ------运行结果------# 获取sheet表单元格值
cell_0_value = sheet_1.cell_value(0,0)
print(cell_0_value)
# ------运行结果------
# 日期
# ------运行结果------# 获取单元格类型
cell_0_type = sheet_1.cell_type(0,0)
print(cell_0_type)
# ------运行结果------
# 1
# ------运行结果------

单元格类型索引:

'''
单元格类型索引:
XL_CELL_EMPTY: 'empty',
XL_CELL_TEXT: 'text',
XL_CELL_NUMBER: 'number',
XL_CELL_DATE: 'xldate',
XL_CELL_BOOLEAN: 'bool',
XL_CELL_ERROR: 'error',
XL_CELL_BLANK: 'blank',
'''

获取sheet表行(row)对象及属性:

# 获取sheet表对象有效行数
row_sum = sheet_1.nrows
print(row_sum)
# ------运行结果------
# 29
# ------运行结果------# 获取sheet表某一行长度
row_len = sheet_1.row_len(0)
"def row_len(self, rowx):"
print(row_len)
# ------运行结果------
# 2
# ------运行结果------

获取行对象数据类型及值:

# 获取sheet表某一行所有数据类型及值
row_0 = sheet_1.row(0)
"def row(self, rowx):"
print(row_0)
# ------运行结果------
# [text:'日期', text:'访问量']
# ------运行结果------# 获取某一行对象数据类型、值,可指定开始结束列
row_0_s = sheet_1.row_slice(0,0,1)
"def row_slice(self, rowx, start_colx=0, end_colx=None):"
print(row_0_s)
# ------运行结果------
# [text:'日期']
# ------运行结果------# 获取sheet表对象某一行数据类型,返回一个数组对象
row_0_type = sheet_1.row_types(0)
"def row_types(self, rowx, start_colx=0, end_colx=None):"
print(row_0_type)
# ------运行结果------
# array('B', [1, 1])
# ------运行结果------# 获取sheet表对象某一行数据值
row_0_value = sheet_1.row_values(0)
"def row_values(self, rowx, start_colx=0, end_colx=None):"
print(row_0_value)
# ------运行结果------
# ['日期', '访问量']
# ------运行结果------

获取sheet表所有行(获得一个生成器):

# 获得sheet对象所有行对象生成器
rows = sheet_1.get_rows()
print(rows)
# ------运行结果------
# <generator object Sheet.get_rows.<locals>.<genexpr> at 0x000001AF2C41DDE0>
# ------运行结果------for row in rows:print(row)
# ------运行结果------
# [text:'日期', text:'访问量']
# [xldate:43974.0, number:17.0]
# [xldate:43975.0, number:36.0]
# [xldate:43976.0, number:22.0]
# [xldate:43977.0, number:20.0]
# [xldate:43978.0, number:18.0]
# [xldate:43979.0, number:223.0]
# [xldate:43980.0, number:1187.0]
# [xldate:43981.0, number:854.0]
# [xldate:43982.0, number:119.0]
# [xldate:43983.0, number:164.0]
# [xldate:43984.0, number:123.0]
# [xldate:43985.0, number:32.0]
# [xldate:43986.0, number:336.0]
# [xldate:43987.0, number:277.0]
# [xldate:43988.0, number:14.0]
# [xldate:43989.0, number:57.0]
# [xldate:43990.0, number:18.0]
# [xldate:43991.0, number:12.0]
# [xldate:43992.0, number:67.0]
# [xldate:43993.0, number:532.0]
# [xldate:43994.0, number:1120.0]
# [xldate:43995.0, number:621.0]
# [xldate:43996.0, number:53.0]
# [xldate:43997.0, number:22.0]
# [xldate:43998.0, number:51.0]
# [xldate:43999.0, number:511.0]
# [xldate:44000.0, number:774.0]
# [xldate:44001.0, number:850.0]
# ------运行结果------

注:Excel表格中 0 代表的是 1900 年 1 月 1日,即:


获取列对象及属性:

# 获取sheet表有效列数
col_sum = sheet_1.ncols
print(col_sum)
# ------运行结果------
# 2
# ------运行结果------# 获取列对象
# #################### 该方法好像有问题... ####################3
col_0 = sheet_1.col_slice(1)
"def col_slice(self, colx, start_rowx=0, end_rowx=None):"
print(cell_0)# 获取某一列的值
col_0_value = sheet_1.col_values(0)
"def col_values(self, colx, start_rowx=0, end_rowx=None):"
print(col_0_value)
# ------运行结果------
# ['日期', 43974.0, 43975.0, 43976.0, 43977.0, 43978.0, 43979.0, 43980.0,
# 43981.0, 43982.0, 43983.0, 43984.0, 43985.0, 43986.0, 43987.0, 43988.0,
# 43989.0, 43990.0, 43991.0, 43992.0, 43993.0, 43994.0, 43995.0, 43996.0,
# 43997.0, 43998.0, 43999.0, 44000.0, 44001.0]
# ------运行结果------# 获取某一列的数据类型
col_0_type = sheet_1.col_types(0)
"def col_types(self, colx, start_rowx=0, end_rowx=None):"
print(col_0_type)
# ------运行结果------
# [1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
# 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
# ------运行结果------

3、读取sheet对象中所有数据

1、按行读取:

# 按行读取
data_row = []
for row in range(sheet_1.nrows):data_row.append(sheet_1.row_values(row))print(data_row)
# ------运行结果------
# [['日期', '访问量'], [43974.0, 17.0], [43975.0, 36.0],
# [43976.0, 22.0], [43977.0, 20.0], [43978.0, 18.0],
# [43979.0, 223.0], [43980.0, 1187.0], [43981.0, 854.0],
# [43982.0, 119.0], [43983.0, 164.0], [43984.0, 123.0],
# [43985.0, 32.0], [43986.0, 336.0], [43987.0, 277.0],
# [43988.0, 14.0], [43989.0, 57.0], [43990.0, 18.0],
# [43991.0, 12.0], [43992.0, 67.0], [43993.0, 532.0],
# [43994.0, 1120.0], [43995.0, 621.0], [43996.0, 53.0],
# [43997.0, 22.0], [43998.0, 51.0], [43999.0, 511.0],
# [44000.0, 774.0], [44001.0, 850.0]]
# ------运行结果------

2、按列读取:

# 按列读取
data_col = [sheet_1.col_values(i) for i in range(sheet_1.ncols)]
print(data_col)
# ------运行结果------
# [['日期', 43974.0, 43975.0, 43976.0, 43977.0, 43978.0, 43979.0,
# 43980.0, 43981.0, 43982.0, 43983.0, 43984.0, 43985.0, 43986.0,
# 43987.0, 43988.0, 43989.0, 43990.0, 43991.0, 43992.0, 43993.0,
# 43994.0, 43995.0, 43996.0, 43997.0, 43998.0, 43999.0, 44000.0,
# 44001.0],
# ['访问量', 17.0, 36.0, 22.0, 20.0, 18.0, 223.0, 1187.0, 854.0,
# 119.0, 164.0, 123.0, 32.0, 336.0, 277.0, 14.0, 57.0, 18.0, 12.0,
# 67.0, 532.0, 1120.0, 621.0, 53.0, 22.0, 51.0, 511.0, 774.0, 850.0]]
# ------运行结果------

4、按行读取Excel文件所有sheet表数据

构造一个字典,按行读取文件所有数据:

# 按行读取test01.xls 所有 sheet 表数据
all_data = {}for i,sheet_obj in enumerate(work_book.sheets()):all_data[i] = [sheet_obj.row_values(row)for row in range(sheet_obj.nrows)]
print(all_data)
# ------运行结果------
# {0: [['日期', '访问量'], [43974.0, 17.0], [43975.0, 36.0],
# [43976.0, 22.0], [43977.0, 20.0], [43978.0, 18.0], [43979.0, 223.0],
# [43980.0, 1187.0], [43981.0, 854.0], [43982.0, 119.0],
# [43983.0, 164.0], [43984.0, 123.0], [43985.0, 32.0],
# [43986.0, 336.0], [43987.0, 277.0], [43988.0, 14.0],
# [43989.0, 57.0], [43990.0, 18.0], [43991.0, 12.0],
# [43992.0, 67.0], [43993.0, 532.0], [43994.0, 1120.0],
# [43995.0, 621.0], [43996.0, 53.0], [43997.0, 22.0],
# [43998.0, 51.0], [43999.0, 511.0], [44000.0, 774.0],
# [44001.0, 850.0]],
# 1: [['日期', '访问量', '评论数', '收藏数', '粉丝数'],
# [43974.0, 17.0, 0.0, 0.0, 0.0], [43975.0, 36.0, 0.0, 0.0, 0.0],
# [43976.0, 22.0, 0.0, 0.0, 0.0], [43977.0, 20.0, 0.0, 0.0, 0.0],
# [43978.0, 18.0, 0.0, 0.0, 0.0], [43979.0, 223.0, 0.0, 0.0, 0.0],
# [43980.0, 1187.0, 0.0, 0.0, 0.0], [43981.0, 854.0, 0.0, 0.0, 1.0],
# [43982.0, 119.0, 0.0, 7.0, 0.0], [43983.0, 164.0, 0.0, 1.0, 0.0],
# [43984.0, 123.0, 0.0, 0.0, 0.0], [43985.0, 32.0, 1.0, 0.0, 1.0],
# [43986.0, 336.0, 1.0, 1.0, 1.0], [43987.0, 277.0, 0.0, 0.0, 0.0],
# [43988.0, 14.0, 0.0, 0.0, 0.0], [43989.0, 57.0, 3.0, 4.0, 0.0],
# [43990.0, 18.0, 0.0, 0.0, 0.0], [43991.0, 12.0, 0.0, 0.0, 0.0],
# [43992.0, 67.0, 1.0, 3.0, 0.0], [43993.0, 532.0, 2.0, 6.0, 1.0],
# [43994.0, 1120.0, 0.0, 9.0, 7.0], [43995.0, 621.0, 0.0, 0.0, 0.0],
# [43996.0, 53.0, 0.0, 2.0, 0.0], [43997.0, 22.0, 0.0, 0.0, 0.0],
# [43998.0, 51.0, 0.0, 1.0, 0.0], [43999.0, 511.0, 0.0, 7.0, 3.0],
# [44000.0, 774.0, 0.0, 3.0, 0.0], [44001.0, 850.0, 0.0, 10.0, 0.0]]}
# ------运行结果------

结尾:

以上就是 xlrd 读取Excel表格中数据的操作介绍,总体来说是比较简单的,感谢阅读。

【Python与Office】专栏

该专栏会对 Python 的第三方模块,如:xlwt,xlrd,python-docx等,操作 Office 办公软件(Word Excel PPT)的方法进行详细讲解。同时也会搭配一些实例演练,一方面强化知识点的理解与运用,另一方面也希望能起到,引导读者进行思考:如何用 python 提高 offic 办公软件办公效率的作用。

感兴趣的朋友,可以点个 关注收藏 。如在博客中遇到任何问题或想法,可留言或私信。

创作不易,你的支持是我最大的动力,感谢 !

Python xlrd 读取 Excel 表格基础(一):获取sheet、行、列对象,读取数据类型等相关推荐

  1. 关于在python中如何使用pandas库读取excel表格后 删除含有空值的列

    在使用pandas读入相关的excel后,若是表格中有空值的列,要如何清洗呢 在查阅了网上的相关的资料后,得到了办法 pandas.dropna(axis=1,how='any') axis=0指行, ...

  2. python读取excel表格太大怎么办_Python:使用Openpyxl读取大型Excel工作表

    尝试对load_workbook()类使用read_only = True属性,这会导致您获得的工作表为IterableWroksheet,这意味着您只能迭代它们,您不能直接使用列/行号来访问其中的单 ...

  3. python读取excel表格-python读取excel表格中的数据

    使用python语言实现Excel 表格中的数据读取,需要用到xlrd.py模块,实现程序如下: import xlrd #导入xlrd模块 class ExcelData(): def __init ...

  4. python 如何读取excel表格数据

    文章目录 前言 python 读取excel 表格 前言 如何用python读取excel表格数据呢 ? python 读取excel 表格 首先需要配置好环境,需要下载 xlrd 包: # 如果不指 ...

  5. java获取excle表格对象_Java读取excel表格

    Java读取excel表格 一般都是用poi技术去读取excel表格的,但是这个技术又是什么呢 什么是Apache POI? Apache POI是一种流行的API,它允许程序员使用Java程序创建, ...

  6. java访问excel表格_Java读取excel表格(示例代码)

    Java读取excel表格 一般都是用poi技术去读取excel表格的,但是这个技术又是什么呢 什么是Apache POI? Apache POI是一种流行的API,它允许程序员使用Java程序创建, ...

  7. pandas使用read_excel函数读取excel表格数据为dataframe、设置sheet_name参数为表单索引位置列表则读取多个表单的数据并返回dataframe字典

    pandas使用read_excel函数读取excel表格数据为dataframe.使用sheet_name参数指定读取excel表格中指定的sheet表单.设置sheet_name参数为表单索引位置 ...

  8. Matlab读取excel表格的报错

    Matlab读取excel表格的报错 2018-12-18 使用xlsread函数读取excel表格,出现以下报错: 即显示"服务器出现意外情况",因为我在校内用的正版Matlab ...

  9. python获取指定单元格内容_python读取excel表格指定位置的内容

    今天是第一次写博客,对之前学以致用的内容做一些总结,以备日后忘了或者可以给别人提供一些帮助.话不多说,开始写内容. python读取excel表格指定位置的内容 需求:现在有一个excel表格,里面有 ...

最新文章

  1. 树莓派(raspberry)启用root账户
  2. netty-阻塞模式,非阻塞模式
  3. c语言删除s字符串中所有子串t,从串s中删除所有和串t相同的子串的算法
  4. android tablayout 字体颜色,Tablayout变颜色 以及Fragment进行切换
  5. 垂直居中及容器内图片垂直居中的CSS解决方法
  6. Combox使用的一些技巧
  7. height百分比失效
  8. matlab里用fix函数,Matlab基本函数-fix函数
  9. Day26:configparser、subprocess模块
  10. Java在线反编译器
  11. mysql数据库面试题学生表_SQL笔试题:下面是学生表(student)的结构说明
  12. 刷好老毛子系统进不了老毛子系统后台的解决办法
  13. 斐讯k2路由器刷第三方固件
  14. 软件著作权申请成功,申请流程攻略
  15. springboot自动装配流程图
  16. mysql mysqld multi_MySQL 使用mysqld_multi部署单机多实例详细过程 (转)
  17. [周鸿祎] 与其苟且活着,不如奋起抗争
  18. 电子邮箱地址是什么?如何找回电子邮箱的地址呢?
  19. 解决H5安卓自带浏览器video层级问题
  20. 稳健收益,缺你不可—A股优秀的基金和基金经理

热门文章

  1. ASP.net Core 2.2中Jwt验证的使用方法及在微信小程序上应用
  2. 使用OpenCV、Keras和TensorFlow进行微笑检测
  3. 汽车变速器发响的主要原因一般是什么
  4. 一招教你拿捏网上视频
  5. http range 用法与说明
  6. java双重for循环 效率_Java优化for循环嵌套的高效率方法
  7. 标准DH坐标系,改进DH坐标系转换矩阵matlab函数代码1.0
  8. MySQL之InnoDB的两个配置参数INNODB_FAST_SHUTDOWN和INNODB_FORCE_RECOVERY,用不好可能导致线上万数据丢失
  9. 母婴店不办卡却从来不缺客户?每个月净赚15万背后的方法!
  10. 揭秘手机辐射之迷,教您正确使用手机