嗨,我有一个 python 脚本可以使用 openpyxl 处理 excel 数据,但是在 2500 行之后我得到了内存错误。谁可以帮我这个事?

Posted

技术标签:

【中文标题】嗨,我有一个 python 脚本可以使用 openpyxl 处理 excel 数据,但是在 2500 行之后我得到了内存错误。谁可以帮我这个事?【英文标题】:Hi, I have a python script to work with excel data using openpyxl ,but after 2500 rows i am getting Memory Error. Can anyone help me on this? 【发布时间】:2020-10-23 22:49:54 【问题描述】:

我有一个 python 脚本可以使用 openpyxl 处理 excel 数据,但是在 2500 行之后我遇到了内存错误。谁能帮我解决这个问题?

在这里,我正在写入 excel 并同时处理更新的数据。

import openpyxl
import json,ast,xlrd
loc = "primeline_delivery.xlsx"
shee = openpyxl.load_workbook(loc)
sheet=shee.active
n_col=sheet.max_column
n_col_1=n_col+1
for q in range(1,n_col_1):
    if(sheet.cell(row=1,column=q).value=='source_product_attributes'):
        source=q
for i in range(2,sheet.max_row):
    a=sheet.cell(row=i,column=source).value
    if(a!='[""]'):
        a1=ast.literal_eval(a)
        for j in a1:
            j1=ast.literal_eval(j)
            for k in j1.items():
                print(k)
                for x in range(1,n_col_1):

                    t=0
                    if (sheet.cell(row=1,column=x).value ==k[0]):
                        found = x
                        t=t+1
                        sheet.cell(row=i,column=x).value=str(k[1])
                if(t==0):


                     sheet.cell(row=1,column=n_col_1).value=str(k[0])
                     sheet.cell(row=i,column=n_col_1).value=str(k[1])
                     n_col_1 = n_col_1 + 1
                     print(i)

shee.save('test1.xlsx')

代码运行良好,但在 2500 行后出现内存错误:

Traceback(最近一次调用最后一次):文件 "C:\Users\sryasz\PycharmProjects\sel\venv\lib\site-packages\openpyxl\worksheet\worksheet.py", 第 240 行,在单元格文件中 "C:\Users\sryasz\PycharmProjects\sel\venv\lib\site-packages\openpyxl\worksheet\worksheet.py", 第 256 行,在 _get_cell MemoryError 中

【问题讨论】:

【参考方案1】:

在较旧的并且可能在当前稳定版本 lof openpyxl 中,您可以将 use_iterators=True 传递给 load_workbook()。在即将发布的版本中,此功能似乎已被弃用。

此外,优化模式可能会有所帮助:https://openpyxl.readthedocs.io/en/stable/optimized.html - 您可以尝试先将原始 excel 文件复制到临时文件,将初始状态打开为只读,临时打开为只写,然后迭代只读版本,但对只写版本进行更新,处理完所有数据后,关闭两者并将临时只写版本移回原始版本。

【讨论】:

以上是关于嗨,我有一个 python 脚本可以使用 openpyxl 处理 excel 数据,但是在 2500 行之后我得到了内存错误。谁可以帮我这个事?的主要内容,如果未能解决你的问题,请参考以下文章

使用 TOR 运行 python 脚本

python新创建的脚本文件无法使用popen执行,求解

Python学习15:Open读取文件

PyX python脚本将文件写入磁盘但不写入屏幕

Python运维中常用的_脚本

Python脚本不写入txt文件