2012-06-22 57 views
4

我正在使用Google App Engine(python),我希望我的用戶能夠使用數據存儲庫中的某些數據下載生成的CSV文件(但我不希望他們下載整個事情,因爲我重新排列列和東西)。在Google App Engine上在線生成CSV文件

我必須使用csv模塊,因爲可以有包含逗號的單元格。但是,如果我這樣做,我需要編寫一個文件,這是不允許的谷歌應用程序引擎的問題

我現在有是這樣的:

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

所以,我想我會希望能做的就是處理與逗號細胞..或使用csv模塊,而無需編寫一個文件,因爲這是不可能的GAE ..

回答

15

我找到了一種方法來使用CSV模塊GAE!那就是:

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

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

這樣,您就不需要寫任何文件

3
import StringIO 

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

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

tmp.close() 
print contents 
6

下面是使用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), 
相關問題