我有一个脚本,它使用openpyxl打开一个xlsx模板文件,然后在6个工作表中创建一个,从脚本中先前生成的列表中添加一些数据,并更改单元格的格式。在
我遇到的问题是,在一张纸上,我需要写9列500k+行,这给了我一个MemoryError
。在
Traceback (most recent call last):
File "C:\python27\labs\labs\sqrdist\new_main_ui.py", line 667, in request_and_send_reports
x = sqr_pull.main()
File "C:\Python27\lib\site-packages\memory_profiler-0.32-py2.7.egg\memory_profiler.py", line 801, in wrapper
val = prof(func)(*args, **kwargs)
File "C:\Python27\lib\site-packages\memory_profiler-0.32-py2.7.egg\memory_profiler.py", line 445, in f
result = func(*args, **kwds)
File "C:\python27\labs\labs\sqrdist\sqr_pull.py", line 327, in main
os.remove(temp_attach_filepath)
File "build\bdist.win32\egg\openpyxl\workbook\workbook.py", line 281, in save
File "build\bdist.win32\egg\openpyxl\writer\excel.py", line 214, in save_workbook
File "build\bdist.win32\egg\openpyxl\writer\excel.py", line 197, in save
File "build\bdist.win32\egg\openpyxl\writer\excel.py", line 109, in write_data
File "build\bdist.win32\egg\openpyxl\writer\excel.py", line 134, in _write_worksheets
File "build\bdist.win32\egg\openpyxl\writer\worksheet.py", line 281, in write_worksheet
File "build\bdist.win32\egg\openpyxl\writer\worksheet.py", line 381, in write_worksheet_data
File "build\bdist.win32\egg\openpyxl\writer\worksheet.py", line 404, in write_cell
File "build\bdist.win32\egg\openpyxl\xml\functions.py", line 142, in start_tag
File "C:\Python27\lib\xml\sax\saxutils.py", line 159, in startElement
self._write(u' %s=%s' % (name, quoteattr(value)))
File "C:\Python27\lib\xml\sax\saxutils.py", line 104, in write
self.flush()
MemoryError
我认为引起这种情况的代码如下,KeywordReport
是一个列表列表。在
我已经看了http://openpyxl.readthedocs.org/en/latest/optimized.html但是我不认为我可以使用它来编写而不直接将其转储到新的工作簿中,但是我需要现有模板中的数据。在
有办法吗?在
50万行应该不是什么大问题。但我想这也取决于你有多少份工作表。系统上有多少内存?在
安装lxml会更快(创建循环之外的任何样式),但我不希望它会降低内存使用量。在
如果您想使用工作簿中的现有数据来减少对现有数据的读取和写入,您可能会认为这两种方法都需要使用工作簿中的副本。进一步的讨论可能是最好的邮件列表。在
相关问题 更多 >
编程相关推荐