使用python中xird进行读取文件以及遇到的报错

news2024/11/26 9:58:22

由于平日系统导出的文档均为.xls的execel,故本文主要讲如何使用xlrd进行读取表格以及操作过程遇到的报错以及对应解决版本
一、基本使用
准备“成绩表.xlsx”文件,如下:
在这里插入图片描述

1、读取文件并获得文件的sheet名字
(1)代码

import  xlrd
import os

def base_use(file_name):
    file_path = os.path.dirname(os.path.abspath(__file__))
    base_path = os.path.join(file_path, file_name)
    # 打开文件
    data = xlrd.open_workbook(base_path)
    #基本信息1:获取表格sheet名字
    sheets_name = data.sheet_names()
    print(type(sheets_name))
    print("获取表格sheetname"+str(sheets_name))

if __name__ =="__main__":
    base_use("成绩表.xlsx")

(2)解析,以及运行结果
通过上面程序,
**解析1:**os.path.dirname获取到python文件所在的绝对路径
使用join函数,将文件进行拼接,从而实现路径的灵活性
解析2:通过sheet_names()获取文件中的sheet页的名字,结果并以list类型存储,后续使用可按照list进行访问
在这里插入图片描述
2、读取文件并获取每一行数据
(1)通过sheets方式获取表个数,并通过row_values获取每行数据
遍历获取三个表格每行数据如下:

def get_row_values(filename):
    file_path = os.path.dirname(os.path.abspath(__file__))
    base_path = os.path.join(file_path,filename)

    #打开文件
    data = xlrd.open_workbook(base_path)
    #获取sheet文档的方式一:sheets函数遍历
    print(len(data.sheets()))
    for i in range(len(data.sheets())):
        print("___________________________")
        table = data.sheets()[i]

        print(table.nrows)
        for j in range(table.nrows):
            print(table.row_values(j))

代码结果:
在这里插入图片描述
说明:也可以通过下面两种的语句获取到sheet
table = data.sheet_by_index(i):通过索引
table = data.sheet_by_name(data.sheet_names()[i]):通过sheetname
在这里插入图片描述
3、读物文件并获取每一列数据

def get_col_values(filename):
    file_path = os.path.dirname(os.path.abspath(__file__))
    base_path = os.path.join(file_path, filename)
    # 打开文件
    data = xlrd.open_workbook(base_path)
    # 获取sheet文档的方式一:sheets函数遍历
    for i in range(len(data.sheets())):
        print("___________________________")
        # table = data.sheets()[i]
        # table = data.sheet_by_index(i)
        table = data.sheet_by_name(data.sheet_names()[i])
        for j in range(table.ncols):
            print(table.col_values(j))

运行结果:
与每行获取数据类似,只是使用col_values()进行获取
在这里插入图片描述
4、读取文件并获取制定行列的数据

def get_one_row_col_value(filename):
    file_path = os.path.dirname(os.path.abspath(__file__))
    base_path = os.path.join(file_path, filename)
    # 打开文件
    data = xlrd.open_workbook(base_path)

    for i in range(len(data.sheets())):
        print("___________________________")
        # table = data.sheets()[i]
        # table = data.sheet_by_index(i)
        table = data.sheet_by_name(data.sheet_names()[i])
        print(table.cell_value(0,0))
        print(table.cell(1,1).value)
        print(table.row(2)[2].value)

代码解析
可通过table.cell_value(0,0)、table.cell(1,1).value、table.row(2)[2].value三种方式获取单元格的值
在这里插入图片描述
通过运行结果,我们可以看到,存储的行和列的均是从0开始的**【使用的时候需要注意哦】**
在这里插入图片描述

二、遇到的报错
1、raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+‘; not supported’)
原因:遇到高xird版本导致不支持xlsx格式数据
报错:

raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+‘; not supported’)
解决版本:
安装版本的:
在这里插入代码片
pip install xlrd==1.2.0
安装完毕后:
在这里插入图片描述
2、FileNotFoundError: [Errno 2] No such file or directory:
在这里插入图片描述
原因:文件路径不正确
反复查询了好几遍均未发现问题所在,后来通过复制文件,发现多一个空格
最终通过去掉空格,程序运行完毕
三、实践
1、示例1:获取某个表格中从[x,y]行区间中的数据并存储到列表中


def get_some_rows_values(file_name,sheet_num,start_row,end_row):
    """
    功能:实现获取某个sheet页(sheet_num)中从[start_row,end_row]行的数据,并存储到list中
    *list中每个元素为一行数据
    :param file_name:文件的名称
    :param sheet_num:要查询第n个sheet页   n取值范围为【1,sheet个数】
    :param start_row:要查询的开始的行号    start_row取值范围[1,sheet最大行号]
    :param end_row: 要查询的结束的行号    end_row取值范围[1,∞]
    :return:row_data_list
    """
    file_path = os.path.dirname(os.path.abspath(__file__))
    base_path = os.path.join(file_path,file_name)
    #打开文件
    data = xlrd.open_workbook(base_path)
    table = data.sheets()[sheet_num - 1]
    if end_row > table.nrows:
        end_row = table.nrows
    if start_row>table.nrows:
        print("请检查起始行,当前检测到起始行大于表格的最大行数了")
    else:
        row_data_list =  []
        for i in range(start_row-1,end_row):
            row_data_list.append(table.row_values(i))
        return row_data_list

运行结果:
在这里插入图片描述
在这里插入图片描述
2、示例2:获取某些列的信息
该部分与示例1代码结构相同,只是把行相关函数更换为列函数,需要注意的是:如果第一行是字段名,获取到的列信息第一个元素是字段名,实际取用的时候,需要进行处理

def get_some_cols_values(file_name,sheet_num,start_col,end_col):
    """
    功能:实现获取某个sheet页(sheet_num)中从[start_row,end_row]行的数据,并存储到list中
    *list中每个元素为一行数据
    :param file_name:文件的名称
    :param sheet_num:要查询第n个sheet页   n取值范围为【1,sheet个数】
    :param start_col:要查询的开始的行号    start_row取值范围[1,sheet最大行号]
    :param end_col: 要查询的结束的行号    end_row取值范围[1,∞]
    :return:col_data_list
    """
    file_path = os.path.dirname(os.path.abspath(__file__))
    base_path = os.path.join(file_path,file_name)
    #打开文件
    data = xlrd.open_workbook(base_path)
    table = data.sheets()[sheet_num - 1]
    #针对填写的末列号大于总行号的情况进行处理
    if end_col > table.ncols:
        end_col = table.ncols
    #针对首列号填写进行检查,并将获取的值存储到list中
    if start_col>table.ncols:
        print("请检查起始列,当前检测到起始列大于表格的最大列数了")
    else:
        col_data_list =  []
        for i in range(start_col-1,end_col):
            col_data_list.append(table.col_values(i))
        return col_data_list

运行结果:
在这里插入图片描述
在这里插入图片描述
3、示例3:获取某些行和某些列之间交集的数据

def get_some_zone_values(file_name,sheet_num,row_min,row_max,col_min,col_max):
    """
    功能:实现行号【row_min,row_max】->【col_min,col_max】之间的表格中的数据
    最终存储到嵌套list中,每个子list为一行数据
    :param file_name: 文件的名称
    :param sheet_num: 要查询第n个sheet页   n取值范围为【1,sheet个数】
    :param row_min: 要查询的开始的行号,取值范围【1,∞)
    :param row_max: 要查询的结束的行号,取值范围【1,∞)
    :param col_min: 要查询的开始的列号,取值范围【1,∞)
    :param col_max: 要查询的结束的列号,取值范围【1,∞)
    :return: zone_data_list
    """
    file_path = os.path.dirname(os.path.abspath(__file__))
    base_path = os.path.join(file_path, file_name)
    # 打开文件
    data = xlrd.open_workbook(base_path)
    table = data.sheets()[sheet_num - 1]
    # 针对填写的末列号大于总行号的情况进行处理
    if col_max > table.ncols:
        col_max = table.ncols
    if row_max > table.nrows:
        row_max = table.nrows
    # 针对首列号填写进行检查,并将获取的值存储到list中
    if col_min > table.ncols or row_min > table.nrows:
        print("请检查起始列/起始行,当前检测到起始值大于表格的最大值了")
    else:
        zone_data_list = []
        #进行存储数据
        for i in range(row_min - 1, row_max):
            row_data_list = []
            for j in range(col_min - 1,col_max):
                row_data_list.append(table.cell_value(i,j))
                """
                方式二
                row_data_list.append(table.cell(i, j).value)
                方式三
                row_data_list.append(table.row(i)[j].value)
                """
            zone_data_list.append(row_data_list)

        return zone_data_list

运行结果:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python 作为开发语言可以吗?怎么掌握 python 才能提升自己

Python 作为开发语言好吗?怎么掌握 python 才能提升自己?下面就跟小编一起来看看吧! 很多朋友都是零基础,在选择编程语言的时候,不知道哪种语言才是适合自己去深入学习的。现在全世界有非常多的 Python 语言用户&…

精美的早安问候语,暖心祝福,开心每一天

1、 美好的祝福,成了清晨的主题。相互问候,是一天的开始。让我们伴着不老的岁月,永远开心快乐。早晨好! 2、 心宽似海,百福皆来,世事看淡,内心安然。随缘即福,随遇而安&#xff0…

全局事件总线

全局事件总线 功能:可以解决所有组件之间通信传数据的问题原理:通过一个共享对象,将所有组件全部绑定到对象上,即可通过这个对象实现组件与组件之间的传递数据,而这个共享对象叫做全局事件总线。 如何分清楚谁是发送方…

超级干货 | 一些常用的api接口

在工作或是学习中我们经常会使用到一些api,这些api是该网站用于查询或者是测试的接口。有了它们,我们甚至不需要登录该网站就能完成自己所想的目标。今天我就将一些常用的api进行总结,涵盖各个方面,大家需要的时候翻阅使用就可以了…

易云维智慧工业云平台助力广西国企培育数字产业化平台,打造数字化产业生态

2022年6月6日,广西壮族自治区人民政府国有资产监督管理委员会出台了《国有企业数字化转型工作实施意见》,明确了总体要求、主要目标、重点推进国有企业数字化转型的任务和保障措施。 《意见》预计,到2025年底,广西基本实现自治区级…

数据加密中,采用密钥管理系统相比加密机的好处

密钥管理系统与加密机都能提供数据加解密,那么针对具体的应用加密,采用密钥管理系统比单纯使用加密机有哪些优点,列表如下: 集中化管理:密钥管理系统可以对加密算法和密钥进行集中化管理,使得企业可以对加…

宁夏企业过等保选哪家测评机构好?选哪家堡垒机好?

最近不少宁夏小伙伴在问,宁夏企业过等保选哪家测评机构好?选哪家堡垒机好?今天我们小编就给大家来简单说说哈! 宁夏企业过等保选哪家测评机构好? 目前宁夏正规具有资质的等保测评机构只有3家,分别为中电信…

虹科分享丨DevOps 是否已死?AI 和大语言模型给云计算和 DevOps 带来了哪些影响?

来源:虹科云科技虹科分享丨DevOps 是否已死?AI 和大语言模型给云计算和 DevOps 带来了哪些影响?云计算创新已经从革命性阶段过渡到了进化性阶段,重点在于迁移和重构工作负载。https://mp.weixin.qq.com/s/mx67vqxoEoMLMrbvE-D8_w …

光耦合器:6N136和6N137之间的差异

光耦合器也称为光隔离器,通过在输入和输出电路之间提供电气隔离,在电子电路中发挥着关键作用。业界常用的两种光耦合器6N136和6N137。本文深入研究了这些组件的技术方面,重点介绍了它们的主要差异和应用。 光耦合器概述 光耦合器是能够在两…

计算机网络中常见缩略词翻译及简明释要

强烈推荐OSI七层模型和TCP/IP四层模型,借用一下其中图片,版权归原作者 SW: 集线器(Hub)、交换机(SW)、路由器(router)对比区别 集线器是在物理层; 交换机&Mac地址是在数据链路层(Mac物理地址…

【LeetCode: 67. 二进制求和 | 位运算 】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

power point导出pdf保留字体

在 slides 中用到非自带的字体,如 [1],想导出成 pdf 文件(因为导出成图,如 png,放大会蒙),并在别人电脑里也保留字体。除了让别人也装上相应字体,可以: 参考 [2]&#x…

探秘网页打开的完整过程:DNS解析、CDN加速和Nginx负载均衡的协同驱动

浅谈一个网页打开的全过程(涉及DNS、CDN、Nginx负载均衡等) 1、概要 从用户在浏览器输入域名开始,到web页面加载完毕,这是一个说复杂不复杂,说简单不简单的过程,下文暂且把这个过程称作网页加载过程。下面…

【ARM Coresight SoC-400/SoC-600 专栏导读】

文章目录 1. ARM Coresight SoC-400/SoC-600 专栏导读目录1.1 Coresight 专题1.1.1 Performance Profiling1.1.2 ARM Coresight DS-5 系列 1. ARM Coresight SoC-400/SoC-600 专栏导读目录 本专栏全面介绍 ARM Coresight 系统 及SoC-400, SoC-600 中的各个组件。 1.1 Coresigh…

运放注意事项

文章目录 运放使用的注意事项RMS-DC转换器,有效值测量芯片 运放使用的注意事项 RMS-DC转换器,有效值测量芯片 这个图从国外一个万用表拔下来的 AD637,AD536,AD636,LTC1966,LTC1967,LTC1968, 一个AD637特别贵

DHorse v1.4.2 发布,基于 k8s 的发布平台

版本说明 优化特性 在集群列表增加集群版本;修改Jvm的GC指标名; 解决问题 解决shell脚本换行符的问题;解决部署历史列表页,环境名展示错误的问题;解决指标收集功能的异常; 升级指南 升级指南 DHorse…

Jetpack:010-Jetpack中的进度条

文章目录 1. 概念介绍2. 使用方法2.1 圆形进度条2.2 长条形进度条 3. 示例代码4. 内容总结 我们在上一章回中介绍了Kotlin中的lambda、匿名函数和闭包,本章回中主要介绍 进度条。闲话休提,让我们一起Talk Android Jetpack吧! 1. 概念介绍 进…

分类预测 | MATLAB实现WOA-LSTM鲸鱼算法优化长短期记忆网络数据分类预测

分类预测 | MATLAB实现WOA-LSTM鲸鱼算法优化长短期记忆网络数据分类预测 目录 分类预测 | MATLAB实现WOA-LSTM鲸鱼算法优化长短期记忆网络数据分类预测分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现WOA-LSTM鲸鱼算法优化长短期记忆网络数据分类预测…

TortoiseSVN安装与使用

文章目录 一、TortoiseSVN下载二、下载简体中文包三、TortoiseSVN安装1、双击安装包,点击Next2、更改安装目录3、点击Finish结束安装4、根据情况选择立刻重启系统还是稍后5、双击语言包,点击下一步6、勾选语言包生效,点击完成结束安装 四、To…

【网络】网络入门

网络入门 一、网络发展二、网络协议初识1、认识"协议"2、协议分层3、OSI七层模型4、TCP/IP五层(或四层)模型 三、网络传输基本流程1、同局域网的两台主机通信2、跨网络的两台主机通信 四、网络中的地址管理1、IP地址2、认识MAC地址 一、网络发展 独立模式&#xff1a…