在Django中使用xlrd读取excel表格数据

news2024/12/27 10:18:29

目录

方法一:按行读取

方法二:按表头与表数据一一对应的关系

方法三:按列的方式读取


之前有说到如何在Django中读取数据库数据写入到excel中 今天来说说如何读取excel中的数据,(读取后就可以写入到数据库中了)​​​​​​​

开始前需要安装xlrd模块

pip install -i https://pypi.douban.com/simple xlrd

 默认安装最新版,支持xls格式的excel文件,如果是xlsx文件格式可能需要安装旧版本的xlrd

方法一:按行读取
import xlrd


class ReadExcel(View):
    def post(self, request):
        excel_file = request.FILES['excel_file']  # 获取上传的Excel文件

        workbook = xlrd.open_workbook(file_contents=excel_file.read())  # 打开Excel文件

        sheet_names = workbook.sheet_names()  # 获取所有工作表的名称
        # 方式一:按行
        data = []  # 存储所有工作表的数据
        for sheet_name in sheet_names:
            sheet = workbook.sheet_by_name(sheet_name)  # 获取具体的工作表

            rows = []
            for row_num in range(sheet.nrows):  # 迭代每一行数据
                row_values = sheet.row_values(row_num)  # 获取当前行的值
                rows.append(row_values)

            data.append({
                'sheet_name': sheet_name,
                'rows': rows,
            })

        return JsonResponse({"res": data})

使用book_data.xls表格文件,内容如下

 输出结果:

{
    "res": [
        {
            "sheet_name": "图书表",
            "rows": [
                [
                    "图书名",
                    "地址",
                    "年代"
                ],
                [
                    "《Python+Cookbook》第三版中文v3.0.0.pdf",
                    "天津市",
                    "1999.11"
                ],
                [
                    "Django 2.2 官方文档中文版.pdf",
                    "北京市东城区",
                    "1980.07"
                ],
                [
                    "MySQL必知必会(文字版).pdf",
                    "南京市鼓楼区",
                    "2020.08"
                ],
                [
                    "PyCharm知识手册V1.0.pdf",
                    "安徽合肥市",
                    "1987.12"
                ],
                [
                    "流畅的Python.pdf",
                    "南京高淳区",
                    "2000.01"
                ],
                [
                    "深入理解Python中文版高清(Dive+into+Python)@www.java1234.com.pdf",
                    "河南洛阳",
                    "2023.10 "
                ]
            ]
        },
        {
            "sheet_name": "Sheet2",
            "rows": [
                [
                    "图片名",
                    "路径"
                ],
                [
                    "测试",
                    "测试路径"
                ]
            ]
        },
        {
            "sheet_name": "Sheet3",
            "rows": []
        }
    ]
}

方法二:按表头与表数据一一对应的关系
import xlrd


class ReadExcel(View):
    def post(self, request):
        excel_file = request.FILES['excel_file']  # 获取上传的Excel文件

        workbook = xlrd.open_workbook(file_contents=excel_file.read())  # 打开Excel文件

        sheet_names = workbook.sheet_names()  # 获取所有工作表的名称

        # 方式二:按表头与表数据一一对应关系
        data = []  # 存储所有工作表的数据
        for sheet_name in sheet_names:
            sheet = workbook.sheet_by_name(sheet_name)  # 获取具体的工作表
            if sheet.nrows != 0:
                rows = []
                first_row = sheet.row_values(0)  # 原表头数据
                # first_row = ['name', 'address', 'year']  # 使用对应的英文字段替换上面first_row从表中获取的中文表头名
                for row_num in range(1, sheet.nrows):  # 迭代每一行数据
                    row_values = sheet.row_values(row_num)  # 获取当前行的值
                    zip_data = dict(zip(first_row, row_values))
                    rows.append(zip_data)

                data.append({
                    'sheet_name': sheet_name,
                    'rows': rows,
                })

        return JsonResponse({"res": data})

结果如下:

{
    "res": [
        {
            "sheet_name": "图书表",
            "rows": [
                {
                    "图书名": "《Python+Cookbook》第三版中文v3.0.0.pdf",
                    "地址": "天津市",
                    "年代": "1999.11"
                },
                {
                    "图书名": "Django 2.2 官方文档中文版.pdf",
                    "地址": "北京市东城区",
                    "年代": "1980.07"
                },
                {
                    "图书名": "MySQL必知必会(文字版).pdf",
                    "地址": "南京市鼓楼区",
                    "年代": "2020.08"
                },
                {
                    "图书名": "PyCharm知识手册V1.0.pdf",
                    "地址": "安徽合肥市",
                    "年代": "1987.12"
                },
                {
                    "图书名": "流畅的Python.pdf",
                    "地址": "南京高淳区",
                    "年代": "2000.01"
                },
                {
                    "图书名": "深入理解Python中文版高清(Dive+into+Python)@www.java1234.com.pdf",
                    "地址": "河南洛阳",
                    "年代": "2023.10 "
                }
            ]
        },
        {
            "sheet_name": "Sheet2",
            "rows": [
                {
                    "图片名": "测试",
                    "路径": "测试路径"
                }
            ]
        }
    ]
}

方法三:按列的方式读取
import xlrd


class ReadExcel(View):
    def post(self, request):
        excel_file = request.FILES['excel_file']  # 获取上传的Excel文件

        workbook = xlrd.open_workbook(file_contents=excel_file.read())  # 打开Excel文件

        sheet_names = workbook.sheet_names()  # 获取所有工作表的名称

        # 方式三:按列的方式
        data = []  # 存储所有工作表的数据
        for sheet_name in sheet_names:
            sheet = workbook.sheet_by_name(sheet_name)  # 获取具体的工作表
            if sheet.nrows != 0:
                cols = []
                cols_data = {}
                for col_num in range(sheet.ncols):  # 迭代每一列数据
                    first_row = sheet.col_values(col_num, 0, 1)[0]  # 获取每一列第一行的数据(也就是表头)
                    col_values = sheet.col_values(col_num, 1)  # 从列的第二行开始获取数据
                    cols_data.update({first_row: col_values})
                cols.append(cols_data)

                data.append({
                    'sheet_name': sheet_name,
                    'cols': cols,
                })

        return JsonResponse({"res": data})

结果如下:

{
    "res": [
        {
            "sheet_name": "图书表",
            "cols": [
                {
                    "图书名": [
                        "《Python+Cookbook》第三版中文v3.0.0.pdf",
                        "Django 2.2 官方文档中文版.pdf",
                        "MySQL必知必会(文字版).pdf",
                        "PyCharm知识手册V1.0.pdf",
                        "流畅的Python.pdf",
                        "深入理解Python中文版高清(Dive+into+Python)@www.java1234.com.pdf"
                    ],
                    "地址": [
                        "天津市",
                        "北京市东城区",
                        "南京市鼓楼区",
                        "安徽合肥市",
                        "南京高淳区",
                        "河南洛阳"
                    ],
                    "年代": [
                        "1999.11",
                        "1980.07",
                        "2020.08",
                        "1987.12",
                        "2000.01",
                        "2023.10 "
                    ]
                }
            ]
        },
        {
            "sheet_name": "Sheet2",
            "cols": [
                {
                    "图片名": [
                        "测试"
                    ],
                    "路径": [
                        "测试路径"
                    ]
                }
            ]
        }
    ]
}

共列出三种方式读取

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

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

相关文章

大数据分析平台选型全攻略:关注这五点绝不会错过!

大数据时代,选择适合的大数据分析平台已然成为企业成功的关键条件之一。企业在选择大数据分析平台时需要关注平台的适用性、可扩展性、可靠性、易用性和价格等五个方面。同时,需要结合自身的业务需求和预算进行综合考虑,这样才能在众多的大数…

ubuntu常用软件安装、异常处理

1.ubuntu更换源 打开以下文件: sudo gedit /etc/apt/sources.list 在文件中添加如下内容 #中科大源 deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main re…

在SpringBoot中整合RabbitMQ(19版idea)

首先呢就需要我们在RabbitMQ的可视化端口创建一个虚拟机,我创建的为 xm 1.创建SpringBoot项目 到这里SpringBoot项目就创建成功了 2.创建测试类 Testpublic void testConnection() throws Exception {//1.创建连接工厂ConnectionFactory factory new ConnectionFactory…

MySQL高级整理

MySQL体系结构 Client Connectors: 接入方支持的协议。Management Serveices & Utilities: 系统管理和控制工具,mysqldump、 mysql复制集群、分区管理等。Connection Pool: 连接池,管理缓冲用户连接、用户名、密码…

IPv6 学习笔记

文章目录 一、概念和现状二、适用场景三、地址分配四、检查是否连接到IPv6网络五、查询本机的IPv6地址六、访问IPv6资源的方法 一、概念和现状 IPv6是英文“Internet Protocol Version 6”(互联网协议第6版)的缩写,是互联网工程任务组&#x…

原型链与作用域链

在 JavaScript 中使用构造函数来新建一个对象的,每一个构造函数内部都有一个 prototype 属性,属性值是一个对象,这个对象包含了可以由该构造函数的所有实例共享的属性和方法。当使用构造函数新建一个对象后,在这个对象的内部将包含…

electron打包exe桌面项目打开控制台

阿丹: 之前一直在写web项目,按F12开发控制台很方便但是。现在项目涉及到了桌面的应用这就需要在打包的过程中进行书写配置文件main中添加指令来在app加载完成后打开控制台,这样方便我们寻找报错。 打开方式1 因为使用的工具是electron所以找…

Kubernetes中Pod的调度策略

Kubernetes中Pod的调度策略 1、Pod调度 在 Kubernetes 平台上,我们很少会直接创建一个 Pod,在大多数情况下会通过 RC、Deployment、 DaemonSet、Job 等控制器完成对一组 Pod 副本的创建、调度及全生命周期的自动控制任务。 在最早的 Kubernetes 版本…

【动态规划算法练习】day17

文章目录 一、474. 一和零1.题目简介2.解题思路3.代码4.运行结果 二、879. 盈利计划1.题目简介2.解题思路3.代码4.运行结果 三、377. 组合总和 Ⅳ1.题目简介2.解题思路3.代码4.运行结果 四、96. 不同的二叉搜索树1.题目简介2.解题思路3.代码4.运行结果 总结 二维费用的背包问题…

5分钟了解制造核心5大系统的联系

本篇,我们来快速了解一下制造行业核心的5大系统MES、ERP、WMS、PLM和SCADA究竟有怎么样的关系,它们是如何连接的。 上图粗略描述了MES、ERP、WMS、PLM和SCADA五大系统之间的连接关系。 不过,我们先从ERP系统开始,因为这是大部分制…

前端Vue自定义精美底部操作栏导航栏工具栏 可用于电商购物车底部导航

随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。通过组件化开发,可以有效实现单…

Python实现PSO粒子群优化算法优化BP神经网络分类模型(BP神经网络分类算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 PSO是粒子群优化算法(Particle Swarm Optimization)的英文缩写,是一…

java中CompletableFuture异步编程详解以及实践案例

文章目录 一、CompletableFuture的使用1、 创建CompletableFuture的方式2、 获得异步执行结果3、 对执行结果进行处理4、对执行结果进行消费5、异常处理6、 两组任务按顺序执行7、 两组任务谁快用谁8、 两组任务完成后合并9、 多任务组合 二、一个使用CompletableFuture异步编排…

【算法】区间合并类题目总结

文章目录 重叠区间:452. 用最少数量的箭引爆气球解法1——左边界排序解法2——右边界排序 无重叠区间:435. 无重叠区间解法1——左边界排序解法2——右边界排序 合并区间:56. 合并区间左边界排序这题为什么不能按照右边界排序?其实…

【数据结构与算法】图课后习题

题目 下面一共有七道有关图的课后习题,全部都是思路画图题并不是算法设计题故在此就一起列举出来了~ 1. 已知如下图所示的有向图,请回答下面几个问题 每个顶点的入/出度;邻接矩阵;邻接表;逆邻接表;强连通…

Hugging Face应用——图像识别

利用人工智能解决音频、视觉和语言问题。音频分类、图像分类、物体检测、问答、总结、文本分类、翻译等均有大量模型进行参考。 Eg1: 图像识别 图像分类是为整个图像分配标签或类别的任务。每张图像预计只有一个类别。图像分类模型将图像作为输入并返回有关图像所属类别的预测…

OPPO手机上怎么设置阴历或阳历生日提醒?

有不少手机用户现在使用的都是OPPO这个品牌的手机,并且绝大多数用户都表示OPPO手机是比较好用的,不过也有一部分用户在使用手机的过程中遇到了一些问题,例如不知道在OPPO手机上怎么设置阴历或阳历生日提醒,这应该怎么办呢&#xf…

基于matlab开发和评估停车场场景中的视觉定位算法(附源码)

一、前言 本示例展示了如何使用虚幻引擎模拟环境中的合成图像数据开发视觉定位系统。 获取基本事实以评估定位算法在不同条件下的性能是一项具有挑战性的任务。与使用高精度惯性导航系统或差分GPS等更昂贵的方法相比,不同场景下的虚拟仿真是一种经济高效的方法来获…

数字化时代,到底如何认识商业智能BI?

数字化时代,商业智能BI对于企业的落地应用有着巨大价值,逐渐成为了现代企业信息化、数字化转型中的基础建设。 我曾经看到有人在讨论过商业智能BI的部署对于企业是否有实际意义,现在市场的数据已经证明商业智能BI在商业世界中,在…

使用Docker安装RabbitMQ并实现入门案例“Hello World”

RabbitMQ官方文档:RabbitMQ Tutorials — RabbitMQ 一、RabbitMQ安装(Linux下) 你可以选择原始的方式安装配置,也可以使用docker进行安装,方便快捷! 1. 安装docker 没有docker的先安装一下docker&#x…