解决python执行较大excel文件openpyxl慢问题

以下是关于解决Python执行较大Excel文件openpyxl慢的完整实例教程:

问题描述

当我们使用Python的openpyxl库读取或处理较大的Excel文件时,往往会遇到执行缓慢或卡死的问题。这是由于openpyxl库读取Excel文件时需要将整个文件读入内存中,导致内存占用过大,CPU占用率剧增,从而影响程序的执行效率和响应速度。

解决方案

1. 使用read_only模式

openpyxl库提供了一种read_only模式,该模式可以在打开Excel文件时只读取必要的单元格数据,省去了读取整个文件的过程,可以大大提高程序的执行效率和响应速度。

import openpyxl

# 打开Excel文件,使用read_only模式
workbook = openpyxl.load_workbook(filename='path/to/excel_file.xlsx', read_only=True)

# 使用worksheet.iter_rows()方法读取单元格数据

# 关闭Workbook对象
workbook.close()

2. 分割Excel文件

如果Excel文件过大,超出了Python内存能力范围,可以将文件按行或列分割为多个文件,然后分别处理。下面是一个按行分割Excel文件的示例:

from openpyxl import load_workbook
from openpyxl.utils import range_boundaries

# 定义每个文件的最大行数
batch_size = 1000

# 打开Excel文件
wb = load_workbook('path/to/excel_file.xlsx')

# 获取第一个worksheet对象
ws = wb.worksheets[0]

# 获取打开文件的范围,即worksheet的行列数
min_row, min_col, max_row, max_col = range_boundaries(ws.dimensions)

# 计算需要分割的文件数量
batch_count = (max_row - min_row) // batch_size + 1

# 遍历每个文件并读取数据
for batch_index in range(batch_count):
    # 计算当前文件的起始行和结束行
    start_row = min_row + batch_index * batch_size + 1
    end_row = min_row + (batch_index + 1) * batch_size

    # 创建新的Excel文件
    new_wb = Workbook()

    # 获取worksheet对象
    new_ws = new_wb.active

    # 遍历行并复制单元格数据到新的worksheet中
    for row in ws.iter_rows(min_row=start_row, min_col=min_col, max_row=end_row, max_col=max_col):
        row_data = [cell.value for cell in row]
        new_ws.append(row_data)

    # 保存新的Excel文件
    new_wb.save('path/to/new_excel_file_{}.xlsx'.format(batch_index + 1))

示例说明

示例1:使用read_only模式读取数据

下面是一个使用read_only模式读取Excel文件数据的示例代码:

import openpyxl

# 打开Excel文件,使用read_only模式
workbook = openpyxl.load_workbook(filename='path/to/excel_file.xlsx', read_only=True)

# 获取第一个worksheet对象
worksheet = workbook.worksheets[0]

# 遍历单元格并读取数据
for row in worksheet.iter_rows(min_row=1, min_col=1, max_row=1000, max_col=10):
    for cell in row:
        # 处理单元格数据
        print(cell.value)

# 关闭Workbook对象
workbook.close()

使用read_only模式可以大大提高程序的响应速度和执行效率。

示例2:按行分割Excel文件

下面是一个按行分割Excel文件的示例,将一个10000行的Excel文件分割为10个文件,每个文件包含1000行数据:

from openpyxl import load_workbook
from openpyxl.utils import range_boundaries

# 定义每个文件的最大行数
batch_size = 1000

# 打开Excel文件
wb = load_workbook('path/to/excel_file.xlsx')

# 获取第一个worksheet对象
ws = wb.worksheets[0]

# 获取打开文件的范围,即worksheet的行列数
min_row, min_col, max_row, max_col = range_boundaries(ws.dimensions)

# 计算需要分割的文件数量
batch_count = (max_row - min_row) // batch_size + 1

# 遍历每个文件并读取数据
for batch_index in range(batch_count):
    # 计算当前文件的起始行和结束行
    start_row = min_row + batch_index * batch_size + 1
    end_row = min_row + (batch_index + 1) * batch_size

    # 创建新的Excel文件
    new_wb = Workbook()

    # 获取worksheet对象
    new_ws = new_wb.active

    # 遍历行并复制单元格数据到新的worksheet中
    for row in ws.iter_rows(min_row=start_row, min_col=min_col, max_row=end_row, max_col=max_col):
        row_data = [cell.value for cell in row]
        new_ws.append(row_data)

    # 保存新的Excel文件
    new_wb.save('path/to/new_excel_file_{}.xlsx'.format(batch_index + 1))

上述示例将一个较大的Excel文件按行分割成多个文件处理,并且使用openpyxl库提供的iter_rows()方法读取单元格数据,这种方法可以大大提高程序的执行效率和响应速度。

希望以上内容对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:解决python执行较大excel文件openpyxl慢问题 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Python使用邻接矩阵实现图及Dijkstra算法问题

    Python使用邻接矩阵实现图及Dijkstra算法问题 介绍 图是一种常用的数据结构,它由节点和边组成。在实际应用中,我们经常需要对图进行遍历、搜索和最短等操作。本文将介绍如何使用Python使用邻接矩阵实现图,并使用Dijkstra算法求解最短路径问题。 邻接矩阵 邻接矩阵是一种表示图的常用方法,它使用一个二维数组来表示节点之间的连接关系。在邻接矩阵中,…

    python 2023年5月14日
    00
  • 详解python破解zip文件密码的方法

    详解python破解zip文件密码的方法 在本文中,我们将深入探讨通过使用Python编程语言破解ZIP文件密码的方法。我们将学习使用Python的zipfile模块和crackzip工具。 Python中zipfile模块的使用 zipfile模块是Python标准库中的一部分,可以使用它来创建、读取、写入ZIP文件。要使用此模块,需要导入它。示例代码如下…

    python 2023年5月19日
    00
  • Python chardet库识别编码原理解析

    Python chardet库识别编码原理解析 什么是编码? 编码是一种将电脑可以识别的0和1的数字,转变为能够人类可以阅读的文本、图片、音频或视频的过程。对于每种类型的资料,都有对应的编码方式。 例如:计算机中存储的文本是以0和1的电信号存储的,而能够人类理解的文字是以字母或汉字的形式存储的,书写密码也可以理解为编码,将人类可以理解的密码转化为计算机可识别…

    python 2023年5月31日
    00
  • Python加载文件内容的两种实现方式

    当我们需要在Python代码中加载文件内容时,通常有两种方法来实现。 1. 使用with语句读取文件 使用with语句读取文件是一种常用的方法,它可以保证在读取文件结束后,文件会被自动关闭。具体步骤如下: with open(‘sample.txt’, ‘r’) as f: content = f.read() print(content) 上面的代码中,我…

    python 2023年6月3日
    00
  • Python 运行 shell 获取输出结果的实例

    想使用 Python 运行 shell 并获取输出结果,可以使用 Python 的 subprocess 模块实现。具体的步骤: 导入 subprocess 模块: import subprocess 使用 subprocess 模块的 run 函数执行命令: result = subprocess.run([‘ls’, ‘-l’], stdout=subp…

    python 2023年6月5日
    00
  • 如何利用Anaconda配置简单的Python环境

    下面我来为你详细讲解如何利用Anaconda配置简单的Python环境的攻略。 1. 安装Anaconda 首先需要前往官网 https://www.anaconda.com/products/individual 下载并安装Anaconda。安装完成后,会默认配置好Python环境,可以通过命令行输入conda list查看已安装的Python包。 2. …

    python 2023年5月18日
    00
  • python 时间 T 去掉 带上ms 毫秒 时间格式的操作

    想要从带有毫秒的时间格式中去掉毫秒,可以采用Python内建的datetime模块。具体的步骤如下: 导入datetime模块 在代码的开头,可以加上以下语句,导入datetime模块: import datetime 将字符串格式的时间转换为datetime对象 假设有一个字符串时间格式为”2022-01-01 23:59:59.999″,可以使用date…

    python 2023年6月2日
    00
  • Excel 自动将一个单元格的颜色链接到另一个单元格

    在 Excel 中,我们可以通过使用条件格式来实现自动将一个单元格的颜色链接到另一个单元格的功能。以下是如何在 Excel 中实现此功能的完整攻略: 在 Excel 中,选择您要自动将色链接到另一个单元格的单元格。 右键单击所选单元格,选择“条件格式”选项。 在“建规则”对话框中,选择“使用公式确定要设置格式的单元格”选项。 在“格式值为”框中输入公式: =…

    云计算 2023年5月10日
    00
合作推广
合作推广
分享本页
返回顶部