从Google App Engine下载多个csv文件

时间:2014-04-10 05:13:13

标签: python google-app-engine csv google-cloud-datastore export-to-csv

所以我在这里找到了很多关于如何从GAE下载数据到csv的好信息..我遇到的问题是如何导出多个csv文件

要点: 我有一个webapp,它接受多个输入,每个输入,它将数据发送到数据存储区,然后从数据存储区写入csv。示例代码如下:

class RunScript(webapp2.RequestHandler):
def post(self): 
    listOfTickers = self.request.get('Stocks').split(", ")
    for i in listOfTickers:
        self.main(cgi.escape(i))

main方法调用其他函数来获取数据,最后通过以下代码写入csv:

item_query=Item.query().order(Item.keyOfItem).fetch()
    self.response.headers['Content-Type'] = 'text/csv'
    self.response.headers['Content-Disposition'] = 'attachment; filename=file.csv'
    writer = csv.writer(self.response.out)
    for a in item_query:
        rowToWrite=a.row+a.value
        writer.writerow(rowToWrite)
        #empty datastore as data is drawn out
        a.key.delete()

此时,子函数结束,我们回到post()函数中的for循环。我认为子函数结束会触发GAE下载第一个csv,然后再次通过代码后再下载第二个csv。然而,发生的事情是我最后得到一个csv,其中包含两组数据。

有关为何发生这种情况的任何想法?任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:1)

您继续将数据写入同一响应,即写入同一文件。响应无法返回多个文件。

您应该创建多个文件,将它们一起存档到一个文件中,然后返回此存档。

答案 1 :(得分:0)

要创建包含多个单独数据的响应,您应该查看multipart content type。这通常用于请求发送多部分表单数据,但也可以用于响应。

浏览器支持多部分响应:Browser support of multipart responses

还有一个mpAjax javascript库,可以帮助您解析多部分响应。您可能需要test it

答案 2 :(得分:0)

作为替代方案,您也可以将cvs写入单个zip存档。

或者您可以将csv文件写入cloudstorage并使用cloudstorage下载文件(如果需要)。

有关使用cloudstorage的信息,请参阅this gist。它包含一个创建zip存档的示例。