Google App Engine(Python)で動的にCSVファイルを作成してダウンロードさせる方法。
今回の例ではGoogle App Engine用フレームワークKayを使用しています。
CSVファイルを作成するにはcsvモジュールのWriterオブジェクトを使用します。
import csv
…
writer = csv.writer(data)
Writerオブジェクトのコンストラクタの最初の引数は、ファイルライクなオブジェクトをとります。
ここではStringIOを使用します。
import StringIO
data = StringIO.StringIO()
csvファイルのデータは、Writerオブジェクトのwriterow()で書き込みます。
引数には、行データ(バイト列)の配列をとります。
ユニコード文字列はencode()でバイト列にエンコードします。
writer.writerow([u'5560005'.encode('utf-8'), u'大阪府大阪市浪速区日本橋'.encode('utf-8')])
writer.writerow([u'5560006'.encode('utf-8'), u'大阪府大阪市浪速区日本橋東'.encode('utf-8')])
writer.writerow([u'5560004'.encode('utf-8'), u'大阪府大阪市浪速区日本橋西'.encode('utf-8')])
ブラウザでダウンロードさせるには、ヘッダの’Content-Type’に’application/octet-stream’を指定します。
header = Headers()
header.add('Content-Type', 'application/octet-stream');
ヘッダの’Content-Disposition’で、ダウンロードさせるCSVファイルのファイル名をで指定します。
header.add('Content-Disposition', 'attachment', filename='sample.csv')
全体のソースコードは以下のようになります。
views.py
def index(request):
import csv
import StringIO
from werkzeug.datastructures import Headers
from werkzeug import Response
data = StringIO.StringIO()
writer = csv.writer(data)
writer.writerow([u'5560005'.encode('utf-8'), u'大阪府大阪市浪速区日本橋'.encode('utf-8')])
writer.writerow([u'5560006'.encode('utf-8'), u'大阪府大阪市浪速区日本橋東'.encode('utf-8')])
writer.writerow([u'5560004'.encode('utf-8'), u'大阪府大阪市浪速区日本橋西'.encode('utf-8')])
header = Headers()
header.add('Content-Type', 'application/octet-stream');
header.add('Content-Disposition', 'attachment', filename='sample.csv')
return Response(data.getvalue(), headers=header)
###関連ページ