我们正在使用OpenPyxl将MySQL内容导出到Microsoft Excel的XSLX格式中。
编辑:OpenPyxl的作者Eric指出,有一种选项可以使OpenPyxl使用固定的内存写入。但是,这并没有完全解决我们的问题,因为我们仍然存在Python中速度慢和其他占用过多内存的问题。
现在,我们正在寻找更有效的创建Excel文件的方法。最好使用Python,但如果我们找不到好的解决方案,我们可能还想查看其他编程语言。
选项(没有特定的顺序)包括:
1)使用OpenOffice和PyUno,并希望它们的内存结构比OpenPyxl更有效,并且TCP/IP调用桥足够高效。
https://bitbucket.org/ericgazoni/openpyxl/overview
然而,我们处理的数据量很大。我们正在面临内存不足的情况。表格可能包含50000多行中的400列。即使文件很大,Microsoft Excel或OpenOffice也不应该有问题。 我们认为,我们的问题主要源于Python以不够高效的方式在内存中保留XML DOM结构。编辑:OpenPyxl的作者Eric指出,有一种选项可以使OpenPyxl使用固定的内存写入。但是,这并没有完全解决我们的问题,因为我们仍然存在Python中速度慢和其他占用过多内存的问题。
现在,我们正在寻找更有效的创建Excel文件的方法。最好使用Python,但如果我们找不到好的解决方案,我们可能还想查看其他编程语言。
选项(没有特定的顺序)包括:
1)使用OpenOffice和PyUno,并希望它们的内存结构比OpenPyxl更有效,并且TCP/IP调用桥足够高效。
2) Openpyxl使用xml.etree。Python lxml(libxml2本地扩展)在XML内存结构方面更有效率,是否可以直接用lxml替换xml.etree,例如通过猴子补丁进行替换?(如果有明显的好处,则稍后可以将更改贡献回Openpyxl)
3) 从MySQL导出到CSV,然后使用Python和文件迭代直接将CSV文件后处理为XSLX
4) 使用其他编程语言和库(Java)
提示:
http://dev.lethain.com/handling-very-large-csv-and-xml-files-in-python/
http://enginoz.wordpress.com/2010/03/31/writing-xlsx-with-java/