Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用openpyxl将一个大型矩阵写入excel,它会抛出一个内存错误_Python_Openpyxl - Fatal编程技术网

Python 使用openpyxl将一个大型矩阵写入excel,它会抛出一个内存错误

Python 使用openpyxl将一个大型矩阵写入excel,它会抛出一个内存错误,python,openpyxl,Python,Openpyxl,数据包含3000行和3000列。我使用openpyxl将这个大矩阵写入excel,但它会抛出内存错误。 我的write excel功能的详细信息如下: These days I use the openpyxl to write the large excel data. 如果您遇到内存错误,那么这可能意味着您的工作表中有许多唯一的字符串。在只写模式下,openpyxl在每行运行时序列化,3000个单元不占用大量内存。但是,字符串保存在一个中心字典中,在写入所有单元格之前无法序列化。但这应该只

数据包含3000行和3000列。我使用openpyxl将这个大矩阵写入excel,但它会抛出内存错误。 我的write excel功能的详细信息如下:

These days I use the openpyxl to write the large excel data.

如果您遇到内存错误,那么这可能意味着您的工作表中有许多唯一的字符串。在只写模式下,openpyxl在每行运行时序列化,3000个单元不占用大量内存。但是,字符串保存在一个中心字典中,在写入所有单元格之前无法序列化。但这应该只适用于几乎每个单元格中都有不同字符串的情况。如果是这种情况,那么openpyxl的唯一解决方案就是增加内存


这是否描述了你的情况?使用了多少内存?其他库(如xlsxwriter)可以通过将字符串直接序列化为子对象来解决这一问题。因此,您可能希望尝试使用“恒定内存”模式。

如果需要使用openpyxl转储大量数据,仅使用
write_only=True
选项将没有帮助,正如openpyxl文档中所述,您需要安装lxml

对我来说,安装lxml后,内存消耗从4GB以上减少到100MB以下

openpyxl文档(搜索lxml,您将找到建议):

对于使用pip安装lxml:

def write_xlsx_file(paths):
   file_name = 'statis_block_base_info_.xlsx'
   #print 'write the ' + str(month) + ' file:' + file_name

    wb = Workbook(write_only = True)

    path_ws = wb.create_sheet(0)
    path_ws.title = 'path_links'

    paths_row = len(paths)
    for i in xrange(0, paths_row):
       path_ws.append(paths[i])

    wb.save(file_name)

你真的需要excel吗?如果您将其作为csv编写,以后可以导入excel,该怎么办?excel无法处理90000列。在excel-2007之前,最大列数以前为256。在Excel2010中,他们将其更改为16000列,我相信这仍然是最大数量。也许您应该查看另一个程序来检查此数据,因为即使将其保存为文本文件,excel也无法处理它。根据:
最大行索引为65535。最大列索引是255。
所以我相信@Haleemulali是正确的。@Haleemulali,对不起,我弄错了。矩阵是3000*3000。但是你的答案是对的,我在问这个问题之前搜索了一下。@average,Excel 1997和Excel 2003,最大列数是256,行数是65536。但是在2010和Excel 2007中,最大列数是16384,行数是1048576。早上,再次运行它,它抛出IOError。但我用这个函数写了两张包含2160*2160矩阵的表,它工作正常,我只把整数写进单元格,所以我猜所有的内存大约是36M。昨天下午,我再次运行了代码。它工作正常。单元格的值几乎为零。
pip install lxml