python 读取excel太慢_Python 读取excel并转换为字典

方法一:利用利用xlrd读取excel文件

其实整个过程比较简单,利用xlrd读取excel文件,再把读取到的数据转换为dict即可。

1.安装 xlrd

pip install xlrd

2.读取文件,并进行格式转换

导入的excel表格的格式是这样的:

9d113ba330b2bce6352daeacead7b635.png

解析后的格式为

[{'编号': 1, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1}, {'编号': 2, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1}, {'编号': 3, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1}, {'编号': 4, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1}, {'编号': 5, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1}, {'编号': 6, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1}]

这里只写出主要的代码段

# excel转dictdef excel_to_dict(self, *args, **kwargs):    """    excel转dict    1.传来的文件可以是文件路径,也可以是二进制文件    2.传来的可以是二进制文件,这里以django接收前端传来文件为例:        接收用 request.FILES.get("fileName", None) 传入 my_file 即可    kwargs接收的参数有:        _sheet索引,0代表第一个表,1代表第二个表,默认0        _max表格最大的行数,默认2000行        _min表格最小的行数,默认1行    """    # excel 文件    excel_file = self.__mark    # sheet 索引    _sheet = kwargs.get("sheet", 0)    # max 最大条数    _max = kwargs.get("max", 2000)    # min 最小条数    _min = kwargs.get("min", 0)    # 判断是否为文件路径    if os.path.exists(excel_file):        workbook = xlrd.open_workbook(excel_file)    else:        # 上传的文件不保存,直接在内存中读取文件        workbook = xlrd.open_workbook(filename=excel_file.name, file_contents=excel_file.read())    # 根据sheet索引或者名称获取sheet内容    data_sheet = workbook.sheets()[_sheet]    # 获取sheet名称,行数,列数据    sheet_name = data_sheet.name    sheet_nrows = data_sheet.nrows    sheet_ncols = data_sheet.ncols    # 文件记录不得大于2000条    if sheet_nrows > _max:        return {"code": "0001", "msg": "文件记录大于{}条,请联系管理员上传".format(_max), "data": None}    # 判断是否为空数据    if sheet_nrows <= _min:        return {"code": "0001", "msg": "空数据表格,停止导入", "data": None}    # excel转dict    get_data = []    for i in range(1, sheet_nrows):        # 定义一个空字典        sheet_data = {}        for j in range(sheet_ncols):            # 获取单元格数据类型            c_type = data_sheet.cell(i, j).ctype            # 获取单元格数据            c_cell = data_sheet.cell_value(i, j)            if c_type == 2 and c_cell % 1 == 0:  # 如果是整形                c_cell = int(c_cell)            elif c_type == 3:                # 转成datetime对象                c_cell = datetime(*xlrd.xldate_as_tuple(c_cell, 0)).strftime('%Y-%m-%d %H:%M:%S')            elif c_type == 4:                c_cell = True if c_cell == 1 else False            sheet_data[data_sheet.row_values(0)[j]] = c_cell            # 循环每一个有效的单元格,将字段与值对应存储到字典中            # 字典的key就是excel表中每列第一行的字段            # sheet_data[self.keys[j]] = self.table.row_values(i)[j]        # 再将字典追加到列表中        get_data.append(sheet_data)    # 返回从excel中获取到的数据:以列表存字典的形式返回    return get_data

方法二:利用xToolkit库

1.安装方法:

pip install xToolkit  -i  http://pypi.douban.com/simple --trusted-host pypi.douban.com

xToolkit库是我自己封装的python内置库的一个扩展库.把python的datetime,string,list,dist,xthread等数据结构进行了功能的扩展。里面好用的功能比较多,可以前往 https://blog.csdn.net/qq_22409661/article/details/108531485 查看具体用法。

2.使用方法比较简单,一行代码即可搞定

xfile.read("./result/t_excel.xls").excel_to_dict()

导入的excel表格的格式是这样的:

9d113ba330b2bce6352daeacead7b635.png
# excel转dict# 1.传来的文件可以是文件路径,也可以是二进制文件# 2.传来的可以是二进制文件,这里以django接收前端传来文件为例:#     接收用 request.FILES.get("fileName", None) 传入 my_file 即可# kwargs接收的参数有:#     _sheet索引,0代表第一个表,1代表第二个表,默认0#     _max表格最大的行数,默认2000行#     _min表格最小的行数,默认1行xfile.read("./result/t_excel.xls").excel_to_dict()[{'编号': 1, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1}, {'编号': 2, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1}, {'编号': 3, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1}, {'编号': 4, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1}, {'编号': 5, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1}, {'编号': 6, '时间': '1988-07-21 00:00:00', '年龄': 1, '分数': 63.2, '总分': 1}]

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

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

相关文章

大表与大表join数据倾斜_技术分享|大数据技术初探之Spark数据倾斜调优

侯亚南数据技术处支宸啸数据技术处在大数据计算中&#xff0c;我们可能会遇到一个很棘手的问题——数据倾斜&#xff0c;此时spark任务的性能会比预期要差很多&#xff1a;绝大多数task都很快执行完成&#xff0c;但个别task执行极慢或者报OOM(内存溢出)。数据倾斜调优&#xf…

磁盘剩余空间策略_MySQL磁盘消耗迅猛掌握这点就够了,包你事半功倍

Part1:写在最前当一张单表10亿数据量的表放在你面前&#xff0c;你将面临着什么&#xff1f;Part2:背景介绍为了提升数据库资源利用率&#xff0c;一个实例中&#xff0c;在不互相影响&#xff0c;保证业务高效的前提下&#xff0c;我们会将同一个大业务下的不同小业务放在一个…

logback日志pattern_@Slf4j 实现日志输入到外部文件

添加一个配置文件\src\main\resources\logback-spring.xml<?xml version"1.0" encoding"UTF-8"?><configuration scan"true" scanPeriod"10 seconds"> <contextName>logbackcontextName> <prope…

前驱和后驱什么意思_为什么只有豪车才敢用后驱

为什么只有豪车才敢用后驱https://www.zhihu.com/video/1156959599864147968一般的家用车&#xff0c;基本上都是前驱为主&#xff0c;前驱够用&#xff0c;成本还低。但前驱满足不了豪华车的运动需求&#xff0c;所以豪华车后驱才是王道。有人这个时候肯定要跳出来不服了&…

思科光传输功率查询_常见的6款40G QSFP+光模块型号介绍及应用

近些年来&#xff0c;云计算和大数据在我国兴起一股热潮&#xff0c;为了提供足够的带宽&#xff0c;许多接入交换机已经发展到可以连接40G以太网的核心交换机。互连数据传输的快速发展&#xff0c;离不开40G光模块&#xff0c;因为它可以提供足够的带宽&#xff0c;以确保数据…

sigquit信号默认忽略吗_老妹儿,你真的搞懂了 Shell 信号吗?

作者&#xff1a;李振良OK链接&#xff1a;https://blog.51cto.com/lizhenliang/1899347哈喽&#xff0c;各位新来的小伙伴们&#xff0c;大家好&#xff01;由于公众号做了改版&#xff0c;为了保证公众号的资源能准时推送到你手里&#xff0c;大家记得将咱们的公众号 加星标置…

datetimepicker不可以选择当天之前_专访吴京:网上《战狼3》的消息我都不知道,大家可以选择不信...

搜狐娱乐讯 (哈麦/文)在2017爆火的《战狼2》之后&#xff0c;吴京演了《祖宗十九代》《流浪地球》《老师好》《银河补习班》《攀登者》《我和我的祖国》《我和我的家乡》《金刚川》八部电影&#xff0c;但是计划中的《战狼3》一直没有动静。不过&#xff0c;关于《战狼3》&…

机器人蛮王_盖伦:吊打我老婆,蛮王:我也是,他:被老婆打的不敢出塔

相遇就是缘分&#xff0c;你点开了我的文章&#xff0c;小编感到万分荣幸&#xff0c;感谢各位朋友。既然看到了我的文章&#xff0c;就说明我们还是有缘&#xff0c;希望大家可以帮我点点左上角的蓝色字体&#xff0c;小编给大家鞠躬了&#xff01;LOL如此好玩的原因&#xff…

android serialport new 软件退出_基于Android9.0,了解Android启动流程

先记住四个进程和三种方式。**四个进程**1.Launcher进程2.system_server进程3.App进程4.Zygote进程**三种方式**1.Binder方式2.Socket方式3.Handler方式点击桌面APP图标&#xff0c;Launcher调用startActivitySafely&#xff08;Launcher进程&#xff09;java/*** Default laun…

【转】使用命令行方式创建和启动android模拟器

原文网址&#xff1a;http://blog.csdn.net/tiandinilv/article/details/8953001 1、Android模拟器介绍 Android中提供了一个模拟器来模拟ARM核的移动设备。Android的模拟器是基于QEMU开发的&#xff0c;QEMU是一个有名的开源虚拟机项目&#xff08;详见http://bellard.org/qem…

LPC1768的SPI通讯

SPI是一种全双工串行接口&#xff0c;可处理多个连接到指定总线上的主机和从机。在数据传输过程中总线上只能有一个主机和一个从机通信。在数据传输中&#xff0c;主机总是会向从机发送一帧8到16个位的数据&#xff0c;而从机也总会向主机发送一帧字节数据 使用代码如下 void S…

文本显示变量_几千个IO状态显示.十几分钟搞定实例

工程上常会在一个或者数个界面中对所有IO点监控&#xff0c;很多小伙伴用一一映射的传统方法来实现&#xff0c;在超小型项目中实用性较强&#xff0c;在稍微大一点的项目中实现起来效率低还经常出错。本文旨在分享有价值的实际经验&#xff0c;供小伙伴们参考。在实现监控前要…

TabBarController创建及使用方法简介

TabBarController创建及使用方法简介 大致讲解一下TabBarController的创建过程&#xff1a; 首先&#xff0c;我们需要一些视图&#xff0c;如创建UIControllerView类型的view1&#xff0c;view2&#xff0c;view3. 然后&#xff0c;我们需要创建 一个UITabBarController类型的…

华为gre隧道全部跑静态路由

最终实现&#xff1a; 1、pc1能用nat上网ping能pc3 2、pc1能通过gre访问pc2 3、全部用静态路由做&#xff0c;没有用ospf&#xff0c;如果要用ospf&#xff0c;那么两边除了路由器上跑ospf&#xff0c;核心交换机也得用ospf r2配置&#xff1a; acl number 3000 rule 5 deny…

数组与串,串的实现,KMP,BF算法

数组是一种常用的数据结构&#xff0c;高级语言头提供了支持数组的基本操作&#xff0c;而且数组也是构成其他数据结构的重要组成。 数组是N个相同元素的构成的占用一块地址连续的内存单元的有限序列。 数组的任一个元素都可以用在数组的位置来表示。 数组与线性表区别&#xf…

结对开发——求最大值

一、题目&#xff1a; 返回一个整数数组中最大子数组的和。 要求&#xff1a; 1.输入一个整形数组&#xff0c;数组里有正数也有负数。 2.数组中连续的一个或多个整数组成一个子数组&#xff0c;每个子数组都有一个和。 3.求所有子数组的和的最大值。要求时间复杂度为O(n)。 二…

浏览器获取设备信息_一条命令获取 IE 浏览器保存网站的账号和密码信息

渗透攻击红队一个专注于红队攻击的公众号大家好&#xff0c;这里是 渗透攻击红队 的第 41 篇文章&#xff0c;本公众号会记录一些我学习红队攻击的复现笔记(由浅到深)&#xff0c;不出意外每天一更Powershell内网渗透一直以来都是一个热门话题&#xff0c;试想在一个大型的内网…

(转) 一步一步学习ASP.NET 5 (四)- ASP.NET MVC 6四大特性

转发&#xff1a;微软MVP 卢建晖 的文章&#xff0c;希望对大家有帮助。原文&#xff1a;http://blog.csdn.net/kinfey/article/details/44459625 编者语 &#xff1a; 昨晚写好的文章居然csdn不审核&#xff0c;这个也难怪人&#xff0c;但自己比较忙没办法。分享继续&#xf…

win10 python 调用模块_python常识系列14--gt;python通过jpype模块调用jar包

前言能坚持一件事&#xff0c;本身就是一种很了不起的才华。一、jpype模块是什么&#xff1f;能够让 python 代码方便地调用 Java 代码的工具二、jpype模块安装安装和其它模块没区别&#xff0c;但是注意模块名 是 jpype1 &#xff0c;后面有个1pip install jpype1三、jpype模块…

mysql 载入主体时出错_mysql遇到load data导入文件数据出现1290错误的解决方案

错误出现情景在cmd中使用mysql命令&#xff0c;学生信息表添加数据。使用load data方式简单批量导入数据。准备好文本数据&#xff1a; xueshengxinxi.txt 文件 数据之间以tab键进行分割执行 “load data infile 文本数据路径 into table tab_load_data” 弹出错误。#load d…