当前位置: 首页 > 知识库问答 >
问题:

您好,我有一个python脚本,可以使用openpyxl处理excel数据,但是在2500行之后,我得到了内存错误。有人能帮我吗?

汝昀
2023-03-14

我有一个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:\用户\sryasz\PycharmProjects\sel\venv\lib\site-包\openpyxl\work表\worksheet.py",第240行,单元格中的File"C:\用户\sryasz\PycharmProjects\sel\venv\lib\site-包\openpyxl\work表\worksheet.py",行256,在_get_cellMemoryError

共有1个答案

田骁
2023-03-14

在较旧的版本中,也许在当前稳定的版本lofopenpyxl中,您可以将use_iterators=True传递给load_workbook()。在即将发布的版本中,这个功能似乎被弃用了。

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

 类似资料: