【问题标题】:generating a CSV file online on Google App Engine在 Google App Engine 上在线生成 CSV 文件
【发布时间】:2013-12-06 02:13:28
【问题描述】:

我正在使用 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 中是不可能的..

【问题讨论】:

    标签: python google-app-engine csv


    【解决方案1】:

    我找到了在 GAE 上使用 CSV 模块的方法!这里是:

    self.response.headers['Content-Type'] = 'application/csv'
    writer = csv.writer(self.response.out)
    
    writer.writerow(["foo", "foo,bar", "bar"])
    

    这样你就不需要写任何文件了

    【讨论】:

    • 嘿,你把这段代码放在哪里?我知道它需要在一个类中,因为您使用的是self,但我的main.py 和其他文件目前没有写在类中。
    【解决方案2】:

    这是在 GAE 中使用Python CSV module 的完整示例。我通常使用它从 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),
    

    【讨论】:

    • 嘿,这些代码会去哪里?我正在努力弄清楚将它放在哪里。在我的 main.py 中包含我的所有路由,还是在我的后端代码文件中完成所有处理并创建我想要导出的列表?
    【解决方案3】:
    import StringIO
    
    tmp = StringIO.StringIO()
    writer = csv.writer(tmp)
    
    writer.writerow(["foo", "foo,bar", "bar"])
    contents = tmp.getvalue()
    
    tmp.close()
    print contents
    

    【讨论】:

      猜你喜欢
      • 2012-07-31
      • 2010-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多