首页 > 其他分享 >大型xlsx文件内容快速读取

大型xlsx文件内容快速读取

时间:2024-10-31 22:42:49浏览次数:1  
标签:xlsx 读取 idx 文件 list 列表 re temp findall

openpyxl的性能还是不够用,我经常会导出很多的xlsx文件获取里面的数据来分析操作。

下面的代码可以直接将xlsx的文本内容直接转为二维列表返回使用:

def 获取数据形成二维列表_原封不动版_V2(path:str)->list:
    zip_file= zipfile.ZipFile(path)
    monitor_typeName = os.path.basename(path).split('-')[0]
    # zip_list = zip_file.namelist() # 得到压缩包里所有文件
    #将被压缩的字符串找到
    字段值列表=[]
    filepath = zip_file.extract('xl/sharedStrings.xml')
    with open(filepath,'r',encoding='utf-8') as in_fd:
        lines = in_fd.readlines()
    line=lines[1]
    #妈的,wps会不记录为空的单元格。
    #这里不能如此粗暴,因为一个si下面可能有多个t标签,我被坑到了。
    #    字段值列表 = re.findall('(?<=<t>).+?(?=</t>)',line)
    si_list = re.findall('(?<=<si>).+?(?=</si>)',line)
    for si in si_list:
        temp_list = re.findall('(?<=<t>).+?(?=</t>)',si)
        字段值列表.append(''.join(temp_list))
    os.remove(filepath)
    #汇聚数据
    filepath = zip_file.extract('xl/worksheets/sheet1.xml')
    lines=None
    with open(filepath,'r',encoding='utf-8') as in_fd:
        lines = in_fd.readlines()
    合并为一行之后的字符串 = ''
    for line in lines:
        合并为一行之后的字符串+=line
    sheetData = re.findall(r'<sheetData>.+</sheetData>',合并为一行之后的字符串)[0]
    rows = re.findall(r'<row.+?</row>',sheetData)
    行列表=[]
    for row in rows:
        cells =re.findall(r'<c.+?</c>',row)
        values = re.findall(r'(?<=<v>)[\+\-\d\.]+?(?=</v>)',row)
        temp_list=[]
        for idx in range(len(cells)):
            if('t="s"' in cells[idx]):
                #字符串类型,需要被补足
                temp_list.append(字段值列表[int(values[idx])])
            elif('t="n"' in cells[idx]):
                #数值类型,不需要被补足
                temp_list.append(int(float(values[idx])))
            elif('t=' not in cells[idx]):
                #数值类型,不需要被补足
                temp_list.append(int(float(values[idx])))
            else:
                #其它类型,暂不考虑,但是需要输出,方便后续排查问题
                print(cells[idx])
        行列表.append(temp_list)
    os.remove(filepath)
    zip_file.close()
    return 行列表;

 

标签:xlsx,读取,idx,文件,list,列表,re,temp,findall
From: https://www.cnblogs.com/love-DanDan/p/18519067

相关文章

  • Qt(文件IO)
    本章主要使用Qt配合UI实现文件IO的功能,编程目标是实现一个文件拷贝器。1.QFileDialog文件对话框(熟悉)与QMessageBox一样,QFileDialog继承了QDialog,是一个用于选择要打开或保存的文件(目录)的模态对话框。因此也使用静态成员函数进行弹窗,对话框的结果(选择的文件或目录的路径......
  • 文件加密的操作步骤是什么(文档如何加密)?这5个方法大有用处,赶快来学!
    在数字化时代,文件加密已成为保护敏感信息安全的重要手段。无论是个人文档、企业资料还是政府文件,加密都能有效防止未经授权的访问和泄露。那么,文件加密的操作步骤是什么呢?本文将为您介绍五种实用的文件加密方法,帮助您轻松掌握文件加密的操作步骤。方法一:使用操作系统内置加......
  • Linux:认识文件
    一、文件fd1.1共识原理 1、文件=内容+属性 2、文件分为打开的文件和没打开的文件(如c中的fopen和fclose)      可以用以下的例子去理解:快递(文件) 有被人(进程)取走的快递(打开的文件)和没被取走的快递(没打开的文件),被人取走的快递研究的是人和快递的关系(进程和文......
  • (教程)如何用 Java 读取和写入图像
    在这篇文章中,我将向您展示如何用Java读取和写入图像文件。我将演示两种不同的方法。第一种是使用 ImageIO,第二种是使用我们的 JDeli图像库。如果您只是在寻找图像查看器,JDeli包含一个内置图像查看器。 如何在Java中读取和写入图像Java为图像提供了一种称为Buffe......
  • 实现Linux系统与Windows系统之间文件共享
    实现Linux系统与Windows系统之间文件共享Samba服务1:先到yum仓库安装相关服务[root@linuxprobe~]#yuminstallsambaLoadedplugins:langpacks,product-id,subscription-manager省略Installing:sambax86_644.1.1-31.el7rhel527kTransactionSummary=======......
  • Mac上搜索文件最快最高效的方法
    Mac的资源管理可以说是弱点所在,文件搜索的操作繁琐又麻烦,想要找到自己需要的文件往往要花不少的时间All节省你的时间,让你的文件搜索不再繁琐,只需搜索,就会显示你想要的内容,可以修改搜索路径,不论是当前用户,还是当前磁盘,亦或者自定义其他的搜索路径,甚至是拓展磁盘,都可以扫描搜索,......
  • 如何在 Go 中解析 yaml 文件
    Go语言没有内置解析yaml文件的功能,实现yaml的解析可以使用第三方库gopkg.in/yaml.v2和gopkg.in/yaml.v3。下面以解析config.yml文件为例,演示解析代码的过程。使用gogetgopkg.in/yaml.v3添加引用。在config目录下,新增文件config.yml文件,内容如下:mongodb:......
  • 20文件系统
    按照格式来存储文件会更好txt文本格式;里面实际上是一串数字,代指某个字母,;音频文件,开头是元数据,是数据的一些基本信息后面是正式信息;声音靠的是记录振幅给扬声器;图片文件,先元数据,然后对每个色块红黄蓝的调色;存文件,一般存在一个储存里,因为多个文件,所以开头先会有一个目录文......
  • C# 读取CAD文件缩略图(DWG文件)
    usingSystem;usingSystem.Drawing;usingSystem.IO;usingSystem.Windows.Forms;publicclassMainForm:Form{privatePictureBoxpictureBox1;privatevoidForm1_Load(objectsender,EventArgse){ViewDWGviewDwg=newViewDWG();......
  • Windows11系统iisetw.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个iisetw.dll文件(挑选合适的版本文件)把它放......