4

Djangoを使用して、いくつかのパラメーターが入力され、プロットが作成されるWebアプリを作成しています。すべてのプロットをzipファイルでダウンロードするためのリンクが必要です。これを行うには、すべてのプロットを作成するビューを作成し(各単一のプロットを作成して表示するビューを作成しました)、それらを圧縮して、zipファイルを応答オブジェクトとして保存します。

これを行う1つの方法は、各プロットを作成し、それをpdfファイルとしてディスクに保存し、最後にそれらをすべて応答として圧縮することです。ただし、可能であれば、ディスクへの保存を回避したいですか?

乾杯。

4

2 に答える 2

6

これは私のために働いたものであり、Krzysiekの使用の提案に従っていStringIOます。これがmatplotlibによって作成されcanvascanvasオブジェクトです。

#Create the file-like objects from canvases
file_like_1 = StringIO.StringIO()
file_like_2 = StringIO.StringIO()
#... etc...
canvas_1.print_pdf(file_like_1)
canvas_2.print_pdf(file_like_2)
#...etc....

#NOW create the zipfile
response = HttpResponse(mimetype='application/zip')
response['Content-Disposition'] = 'filename=all_plots.zip'

buff = StringIO.StringIO()
archive = zipfile.ZipFile(buff,'w',zipfile.ZIP_DEFLATED)
archive.writestr('plot_1.pdf',file_like_1.getvalue())
archive.writestr('plot_2.pdf',file_like_2.getvalue())
#..etc...
archive.close()
buff.flush()
ret_zip = buff.getvalue()
buff.close()
response.write(ret_zip)
return response

これらすべての圧縮部分は、https://code.djangoproject.com/wiki/CookBookDynamicZipから取得されました。

于 2013-01-16T03:11:13.853 に答える
2

StringIOpythonモジュールを見てください。fileこれは、メモリ内の文字列に対する動作を実装します。

于 2013-01-15T10:00:22.903 に答える