如何在Google App Engine上的python中实现csvwriter

时间:2017-03-10 16:21:35

标签: python csv google-app-engine google-app-engine-python

我有一个应用程序可以编写csv作为对特定URL调用的响应。但是,我不知道如何逃避角色。

现在,我的代码看起来像这样

import csv
class ReturnCSV(BaseHandler):
        def get(self, group_id):
            self.response.headers['Content-Type'] = 'text/csv'
            self.response.headers['Content-Disposition'] = "attachment; filename=scenarios.csv"
            self.write(','.join(header))     #header is a list defined elsewhere

            for scenario in list_of_scenarios:
                #do stuff
                self.write('\r\n' + ','.join(output)))  

这会得到预期的输出,除了它不会转义特殊字符。我想我需要用QUOTE_ALL实现csv.writer,但是在尝试时,我得到一个IOError(errno.EROFS, 'Read-only file system', filename)

    self.response.headers['Content-Type'] = 'text/csv'
    self.response.headers['Content-Disposition'] = "attachment; filename=scenarios.csv"
    with open('scenarios.csv', 'w') as output:
        row = ','.join(header)
        wr = csv.writer(output, quoting=csv.QUOTE_ALL)
        wr.writerow(row)

        for scenario in list_of_scenarios:
            #do stuff
            wr.writerow(output)

1 个答案:

答案 0 :(得分:0)

所以,如果我不尝试打开文件然后我拿出我正在做的所有','.join来手动创建CSV,那就让它工作。

output = StringIO.StringIO()
row = header #header created elsewhere
wr = csv.writer(output, quoting=csv.QUOTE_MINIMAL)
wr.writerow(row)
for scenario in list_of_scenarios:
    # do stuff
    wr.writerow(datarow)
self.response.headers['Content-Type'] = 'text/csv'
self.response.headers['Content-Disposition'] = "attachment; filename=scenarios.csv"
self.write(output.getvalue())