6

Google App Engine(python)を使用していますが、データストアから一部のデータを使用して生成されたCSVファイルをユーザーがダウンロードできるようにしたいです(ただし、列を並べ替えるため、ユーザーにすべてをダウンロードさせたくありません)など)。

カンマを含むセルが存在する可能性があるため、csvモジュールを使用する必要があります。しかし、そうすると、ファイルを書き込む必要がありますが、これはGoogleAppEngineでは許可されていません。

私が現在持っているものは次のようなものです:

    tmp = open("tmp.csv", 'w')
    writer = csv.writer(tmp)
    writer.writerow(["foo", "foo,bar", "bar"])

ですから、私がやりたいのは、セルをコンマで処理するか、ファイルを書き込まずにcsvモジュールを使用することです。これはGAEでは不可能です。

4

3 に答える 3

17

GAEでCSVモジュールを使用する方法を見つけました!ここにあります:

self.response.headers['Content-Type'] = 'application/csv'
writer = csv.writer(self.response.out)

writer.writerow(["foo", "foo,bar", "bar"])

このように、ファイルを書き込む必要はありません

于 2012-06-22T22:11:44.783 に答える
7

GAE でPython CSV モジュールを使用する完全な例を次に示します。私は通常、gql クエリから csv ファイルを作成し、ユーザーに保存または開くように求めるために使用します。

import csv

class MyDownloadHandler(webapp2.RequestHandler):
  def get(self):

    q = ModelName.gql("WHERE foo = 'bar' ORDER BY date ASC")
    reqs = q.fetch(1000)

    self.response.headers['Content-Type'] = 'text/csv'
    self.response.headers['Content-Disposition'] = 'attachment; filename=studenttransreqs.csv'
    writer = csv.writer(self.response.out)

行ラベルを作成する

    writer.writerow(['Date', 'Time','User' ])

各インスタンスを行として返すクエリを反復処理する

    for req in reqs:
        writer.writerow([req.date,req.time,req.user])

リンクがクリックされたときにファイル ダイアログが開くように、適切なマッピングを追加します。

('/mydownloadhandler',MyDownloadHandler),
于 2013-12-05T18:13:28.733 に答える
4
import StringIO

tmp = StringIO.StringIO()
writer = csv.writer(tmp)

writer.writerow(["foo", "foo,bar", "bar"])
contents = tmp.getvalue()

tmp.close()
print contents
于 2012-06-22T22:03:08.780 に答える