おおまえです。今日は雪がよく降りますね。また大雪らしいです。前の大雪では傘を持ちながらこけて傘の骨を少し曲げてしまいました。今回は気をつけたいところです。

さて Python で Excel ファイルを作成する際に使うライブラリとして xlwt (*.xls) と openpyxl (*.xlsx) が知られていると思います。

ここで xlwt ライブラリ使う際には注意しなければいけないことが1つあります。それは大量の行/セルを設定する場合は、適当なタイミング(1000行ごとに一回とか)で Worksheet.flush_row_data() を呼んでメモリ上のデータをファイルに書き出すようにすることです。

設定されるデータ量が決まっている場合はよいですが、予測できない場合はこれをやっておかないと大量のメモリを消費させられてひどい目に遭います。(というか遭いました)

このメソッドは http://www.python-excel.org/ から辿れる xlwt document のページには見当たりませんが、The Tutorial python-excel.pdf の Page.21 には以下にような記載にて注意がなされています。

If a large number of rows have been written to a Worksheet and memory usage is becoming a problem, the flush_row_data method may be called on the Worksheet. Once called, any rows flushed cannot be accessed or modified.

It is recommended that flush_row_datais called for every 1000 or so rows of a normal size that are written to an xlwt.Workbook. If the rows are huge, that number should be reduced.

そういうことで xlwt を使っている ExcelDownloadPlugin でその状況になってしまいましたので http://trac-hacks.org/changeset/13423 にて修正しています。同じ問題に遭遇したひとはプラグインを更新してみてください。


Leave a reply

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> 

required