6

我正在使用 Google App Engine (python),我希望我的用户能够下载使用数据存储中的一些数据生成的 CSV 文件(但我不希望他们下载整个内容,因为我重新排序了列和东西)。

我必须使用 csv 模块,因为可能有包含逗号的单元格。但是如果我这样做,我将需要编写一个文件,这在 Google App Engine 上是不允许的

我目前拥有的是这样的:

    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 回答