Google App Engine(Python)で動的にCSVファイルを作成してダウンロードさせる

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)

###関連ページ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください