Python 使读取 Excel 文件更快

2024-02-27

我制作了一个读取 Excel 文档并检查第一行是否包含“UPDATED”的脚本。如果是这样,它将整行写入具有相同选项卡名称的另一个 Excel 文档。

我的Excel文档有23张纸,每张纸有1000行,现在需要15分钟以上才能完成。有没有办法加快这个速度?

我正在考虑多线程或多处理,但我不知道哪一个更好。

更新:我的程序运行了 15 分钟的事实是由只读模式引起的,当我删除它时,运行程序只花了 2 秒

import openpyxl
import os
from datetime import datetime

titles = ["Column1", "Column2", "Column3", "Column4", "Column5","Column6", "Column7", "Column8", "Column9", "Column10", "Column11", "Column12", "Column13", "Column14", "Column15", "Column16"]


def main():
    oldFilePath= os.getcwd() + "\oldFile.xlsx"
    newFilePath= os.getcwd() + "\newFile.xlsx"

    wb = openpyxl.load_workbook(filename=oldFilePath, read_only=True)
    wb2 = openpyxl.Workbook()

    sheets = wb.get_sheet_names()
    sheets2 = wb2.get_sheet_names()

    #removes all sheets in newFile.xlsx
    for sheet in sheets2:
        temp = wb2.get_sheet_by_name(sheet)
        wb2.remove_sheet(temp)

    for tab in sheets:
        print("Sheet: " + str(tab))
        rowCounter = 2

        sheet = wb[tab]
        for row in range(sheet.max_row):
            if sheet.cell(row=row + 1, column=1).value == "": #if cell is empty stop reading
                break
            elif sheet.cell(row=row + 1, column=1).value == "UPDATED":
                if tab not in sheets2:
                    sheet2 = wb2.create_sheet(title=tab)
                    sheet2.append(titles)

                for x in range(1, 17):
                    sheet2.cell(row=rowCounter, column=x).value = sheet.cell(row=row + 1, column=x).value

                rowCounter += 1

                sheets2 = wb2.get_sheet_names()

    wb2.save(filename=newFilePath)


if __name__ == "__main__":
    startTime = datetime.now()
    main()
    print("Script finished in: " + str(datetime.now() - startTime))

对于如此小的工作簿,没有必要使用只读模式,如果不明智地使用它,您自己就会导致问题。每次致电ws.cell()将强制 openpyxl 再次解析工作表。

因此,要么停止使用只读模式,要么使用ws.iter_rows()正如我对你之前的问题所建议的那样。

一般来说,如果您认为某些东西运行缓慢,您应该始终对其进行分析,而不是仅仅尝试某些东西并希望得到最好的结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 使读取 Excel 文件更快 的相关文章

  • 如何解锁和锁定 Excel 单元格以运行宏

    我有一个电子表格 有两个按钮 从数据库检索记录 另一个按钮用于将更改从 Excel 上传到数据库 从数据库检索记录的宏如下 现在 在检索记录后 我希望用户仅编辑某些列 此处为从一月到场景的列 以便用户在更新这些单元格后可以单击更新按钮将更改
  • 子进程改变目录

    我想在子目录 超级目录中执行脚本 我需要首先进入该子目录 超级目录 我无法得到subprocess进入我的子目录 tducin localhost Projekty tests ve python Python 2 7 4 default
  • Python + PostgreSQL + 奇怪的ascii = UTF8编码错误

    我有包含字符的 ascii 字符串 x80 代表欧元符号 gt gt gt print x80 当将包含该字符的字符串数据插入数据库时 我得到 psycopg2 DataError invalid byte sequence for enc
  • 使用 VBA 跟踪 Excel 2007/2010 中的样式更改

    我需要跟踪某些工作表中的单元格样式变化 我无法在 Excel 2007 2010 中使用内置跟踪 因为我需要自定义某些内容 我尝试通过 Workbook SheetChange 跟踪样式更改但失败了 当我将单元格从一种样式更改为另一种样式时
  • 为什么导入 pdb 时出现此错误? “模块”对象没有属性“ascii_letters”

    尝试调试我的代码 我正在导入库pdb import sys from subprocess import check call import pdb functions if name main Code 我收到此错误 File reg p
  • 如何找到列表S的所有分区为k个子集(可以为空)?

    我有一个唯一元素列表 比方说 1 2 我想将其拆分为 k 2 个子列表 现在我想要所有可能的子列表 1 2 1 2 2 1 1 2 我想分成 1 1 2 我怎样才能用 Python 3 做到这一点 更新 我的目标是获取 N 个唯一数字列表的
  • 在 Flask (WSGI) 中使用全局单例,我是否需要担心竞争条件? [复制]

    这个问题在这里已经有答案了 Flask 的 hello world 演示是 from flask import Flask app Flask name app route def hello return Hello World if n
  • 如何使用循环将十进制转换为二进制?

    我想编写一个程序 将十进制数 0 到 9 转换为二进制数 我可以编写如何使用重复除法将十进制数转换为二进制数的代码 但是 我在创建一个以二进制格式打印十进制数字 0 到 9 的循环时遇到了麻烦 这是我的代码 number 0 remaind
  • 用Python中的嵌套for循环替换重复的if语句?

    在我编写的下面的代码中 n 4 所以有五个 if 语句 所以如果我想将 n 增加到 比如说 10 那么就会有很多 if 语句 因此我的问题是 如何用更优雅的东西替换所有 if 语句 n p 4 5 number of trials prob
  • 网页抓取 - 前往第 2 页

    如何访问数据集的第二页 无论我做什么 它都只返回第 1 页 import bs4 from urllib request import urlopen as uReq from bs4 import BeautifulSoup as sou
  • 一行Python和SQLite代码,为什么需要加“,”? [复制]

    这个问题在这里已经有答案了 c execute INSERT INTO numbers VALUES random randint 0 100 如果我将上面的代码更改为 c execute INSERT INTO numbers VALUE
  • 使用java读取Excel工作表的单列

    我有一张 Excel 表格 我想编写一个方法 该方法将参数作为要读取的列号 并返回一个由该列中的所有数据组成的数组 然后将该列元素放置在 xml 工作表中 我怎样才能编写一个方法来做到这一点 使用 Apache POI 您可以在他们的使用页
  • 一起使用 Flask 和 Tornado?

    我是以下的忠实粉丝Flask 部分是因为它很简单 部分是因为它有很多扩展 http flask pocoo org extensions 然而 Flask 是为了在 WSGI 环境中使用而设计的 而 WSGI 不是非阻塞的 所以 我相信 它
  • 参数验证,Python 中的最佳实践[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 让我们举一个 API 的例子 def get abs directory self path if os path isdir path ret
  • 如何在C++中列出Python模块的所有函数名称?

    我有一个 C 程序 我想导入一个 Python 模块并列出该模块中的所有函数名称 我该怎么做 我使用以下代码从模块中获取字典 PyDictObject pDict PyDictObject PyModule GetDict pModule
  • 大型数据集上的 Sklearn-GMM

    我有一个很大的数据集 我无法将整个数据放入内存中 我想在这个数据集上拟合 GMM 我可以用吗GMM fit sklearn mixture GMM 重复小批量数据 没有理由重复贴合 只需随机采样您认为机器可以在合理时间内计算的尽可能多的数据
  • Jupyter Notebook:没有名为 pandas 的模块

    我搜索了其他问题 但没有找到任何有帮助的内容 大多数只是建议您使用 conda 或 pip 安装 pandas 在我的 jupyter 笔记本中 我试图导入 pandas import pandas as pd 但我收到以下错误 Modul
  • 最小硬币找零问题——回溯

    我正在尝试用最少数量的硬币解决硬币找零问题 采用回溯法 我实际上已经完成了它 但我想添加一些选项 按其单位打印硬币数量 而不仅仅是总数 这是我下面的Python代码 def minimum coins coin list change mi
  • 从数据集的给定日期范围中提取属于一天的数据

    我有一个数据集 日期范围为 2018 年 1 月 12 日到 8 月 3 日 其中包含一些值 维数为my df数据框是 my df shape 9752 2 每行包含半小时频率 第一行开始于2018 01 12 my df iloc 0 D
  • 从 pandas 数据框中绘制堆积条形图

    我有数据框 payout df head 10 复制以下 Excel 绘图的最简单 最智能和最快的方法是什么 我尝试过不同的方法 但无法让一切都到位 Thanks 如果您只想要一个堆积条形图 那么一种方法是使用循环来绘制数据框中的每一列 并

随机推荐

  • 从 GitHub 加载 Maven 依赖项 [重复]

    这个问题在这里已经有答案了 如何从 GitHub 存储库添加 Java 库 该库使用 Maven 作为构建系统 作为我的 Maven 项目的依赖项 我可以在不下载和编译库的情况下做到这一点吗 现在您可以使用以下命令从 GitHub 存储库导
  • 使用 sox splice 淡入淡出一组音频文件

    我可以使用 SoX 连接和交叉淡入淡出两个音频文件 如下所示 sox file1 wav file2 wav outfile wav splice q soxi D file1 wav 0 5 其中 soxi 替换是获取 file1 的持续
  • 如何根据整数变量的值动态创建许多标签和文本框?

    当我们知道 n 的值时 例如单击 显示 按钮后 有什么方法可以动态创建和显示带有 n 个相应文本框的 n 个标签 如果有任何事情让您不明白我的问题 请告诉我 谢谢你 我正在使用 VS C Express 2010 Windows 窗体 我将
  • MSXML2.XMLHTTP 请求验证在 ASP Classic 中输入的 URL

    预先感谢您收到的任何帮助 我想让我们的客户端在文本字段中输入 URL 然后检查该 URL 是否存在并有效 我想检查 3 种可能的结果 状态 200 正常 状态 500 服务器错误 或者状态为 404 未找到页面 在 ASP classic
  • 如何修改此指令,以便一旦输入可见,除非单击 x,否则它不会被隐藏?

    http plnkr co edit fXo21LnphHZ3qWnuEMFt p preview http plnkr co edit fXo21LnphHZ3qWnuEMFt p preview 现在 如果您单击输入之外的任何位置 则
  • 在没有主机访问权限的情况下更改 DotNetNuke 中的

    我需要更改 DotNetNuke 网站的标题 我有管理员访问权限 但没有主机访问权限 我还可以通过FTP访问网站的文件目录 我可以更改索引页的标题吗 如果您正在谈论在 文档部分 您可以在页面设置中逐页进行设置 从全局角度来看 没有真正的方法
  • 检查在执行单元测试期间是否附加了调试器

    如果调试器附加到当前测试执行 是否有方法检查 JUnit 代码 在 NET C 中我知道这是可能的Debugger IsAttached 用例是在附加调试器时更改或完全禁用测试超时 因为如果您只有大约 15 秒 定义的超时 来调试测试 这会
  • 在 Java 中通过 CrossOrigin 注解或在 Spring-Config XML 中使用 Spring 属性

    我在Spring中使用CrossOrigin注释 现在我想将属性作为值注入到注释中 我无法让这个工作 现在我像这样访问我的财产 Value settings cors origin String cors origin 我想将此属性注入到
  • Bitbucket符号(箭头)含义

    箭头是什么意思 我对 git 或 bitbucket 并不陌生 但我认为我可能在最初的提交中搞砸了一些事情 我需要帮助来解决这个问题 我的本地存储库中的文件夹不是空的 而是将其拉到该文件夹 所在的另一个位置 是链接吗 不在我的本地仓库上 该
  • Angular NgRx - 继续轮询仅第一次调用的服务的效果

    我有一个应用程序 我刚刚添加了 NgRX 我希望使用效果来打开和关闭轮询 示例大纲 我跟着这个帖子 https bbonczek github io jekyll update 2018 03 01 polling with ngrx ht
  • Clickonce部署到多个环境

    我有一个 WPF 应用程序 想通过 ClickOnce 部署给我们的用户 我们有四种环境 系统测试 用户测试 并行生产和生产 每个都需要一个不同的配置文件 其中包含服务器名称和特定于环境的其他内容 因此它们不能全部使用相同的代码库 大部分代
  • AudioClip 的频率和音调关系 - Unity3D

    我正在尝试仅使用 6 个音频剪辑来重新创建吉他的完整音域 我在想有一种方法可以设置音频剪辑的频率 但audio Frequency仅返回基于压缩格式的音频频率 而不是实际的音调 我知道我可以阅读 GetSpectrumData 但该解决方案
  • 在 R 中,我们如何向 kable() 表添加重要性星星?

    使用knitr kable 函数通过rmarkdown创建 doc表 我们如何从给定的数据帧 df b 添加 重要性星星符号 i e cutpoints c 0 001 01 05 1 1 symbols c 接近存储在另一个数据帧 df
  • Spring Boot 单元测试自动装配

    我有以下课程 应用和配置类 package mypackage service import mypackage service util MyUtility import org springframework boot SpringAp
  • Charles proxY:在 https 上重写不起作用

    我正在使用 Charles Proxy 重写网站上的代码 只是为了测试客户的网站 重写适用于除 https 网站之外的所有网站 Charles 可以选择协议 http 或 https 但这也不起作用 每次重写都在 http 上运行良好 而不
  • Firebase 查询 - 嵌套数据

    我正在尝试查询 firebase 中的一些分层数据 我在弄清楚如何查询以下数据结构时遇到了一些困难 orgs KBFXBBEyvgtfqMvU4pi name ACME 123 owner K9IPqIUIuEFzLS0f Pe users
  • 如何测试 Django 测试用例中是否记录了特定日志消息?

    我想确保代码中的某个条件会导致日志消息写入 django 日志 我如何使用 Django 单元测试框架来做到这一点 是否有地方可以检查记录的消息 类似于检查已发送的电子邮件 我的单元测试扩展了django test TestCase 使用m
  • 可滚动弹性盒中的多种背景颜色

    我有一个flexbox flex direction row 具有 2 列内容和固定高度 我希望左栏和右栏分别有红色和蓝色背景 如果任一列溢出 则flexbox的滚动条出现 溢出的部分仍然是红色 蓝色 如果列的内容高度小于flexbox的高
  • 预取指令是否需要在退出之前返回结果?

    在最新的 Intel 和 AMD CPU 上 已执行但请求的行尚未到达指定缓存级别的预取指令是否仍会退出 也就是说 预取的退休是 阻塞 的 因为它看起来对于加载来说是 阻塞 的 还是非阻塞的 关于英特尔处理器 没有 Intel优化手册第7
  • Python 使读取 Excel 文件更快

    我制作了一个读取 Excel 文档并检查第一行是否包含 UPDATED 的脚本 如果是这样 它将整行写入具有相同选项卡名称的另一个 Excel 文档 我的Excel文档有23张纸 每张纸有1000行 现在需要15分钟以上才能完成 有没有办法