8

OpenPyxl を使用して MySQL コンテンツを Microsoft Excel に XSLX 形式でエクスポートしています

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 メモリ構造を使用してより効率的になりますか? (明らかな利点がある場合は、後で変更を 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/

4

2 に答える 2

4

openpyxl 用に最適化されたライターを調べてみましたか? これは最近の機能 (2 か月前) ですが、非常に堅牢で (いくつかの企業プロジェクトの本番環境で使用されています)、安定したメモリ消費量 (約 7Mb) でほぼ無制限の量のデータを処理できます。

http://packages.python.org/openpyxl/optimized.html#optimized-writer

于 2011-04-18T11:58:35.570 に答える
4

Java を使用する場合は、Apache POI を使用することをお勧めしますが、メモリ フットプリントを抑えたいため、通常の UserModel は使用しない可能性があります。

代わりに、BigGridDemoを見てください。POIを使用して非常に大きな xlsx ファイルを作成する方法が示されていますが、ほとんどの作業はメモリ内で行われません。

また、BigGridDemo で使用されている手法が Python でも同様に使用できることに気付くかもしれません。

于 2011-04-18T10:33:41.037 に答える