2

我有一个视图,它从我的站点获取数据,然后将其转换为 zip 压缩的 csv 文件。这是我的工作代码无 zip:

def backup_to_csv(request):
    response = HttpResponse(mimetype='text/csv')
    response['Content-Disposition'] = 'attachment; filename=backup.csv'

    writer = csv.writer(response, dialect='excel')

    #code for writing csv file go here...

    return response

而且效果很好。现在我希望该文件在发送出去之前被压缩。这就是我卡住的地方。

def backup_to_csv(request):

    output = StringIO.StringIO() ## temp output file
    writer = csv.writer(output, dialect='excel')

    #code for writing csv file go here...

    response = HttpResponse(mimetype='application/zip')
    response['Content-Disposition'] = 'attachment; filename=backup.csv.zip'

    z = zipfile.ZipFile(response,'w')   ## write zip to response
    z.writestr("filename.csv", output)  ## write csv file to zip

    return response

但这不是它,我不知道该怎么做。

4

3 回答 3

6

好,我知道了。这是我的新功能:

def backup_to_csv(request):

    output = StringIO.StringIO() ## temp output file
    writer = csv.writer(output, dialect='excel')

    #code for writing csv file go here...

    response = HttpResponse(mimetype='application/zip')
    response['Content-Disposition'] = 'attachment; filename=backup.csv.zip'

    z = zipfile.ZipFile(response,'w')   ## write zip to response
    z.writestr("filename.csv", output.getvalue())  ## write csv file to zip

    return response
于 2009-09-10T06:37:31.840 回答
5

请注意,在工作情况下,您是如何return response... 而在非工作情况下您 return z,这当然不是HttpResponse(虽然它应该是!)。

所以:在临时文件上使用你的csv_writerNOT ;response压缩临时文件;并将压缩的字节流写入response

于 2009-09-10T05:27:37.773 回答
1
zipfile.ZipFile(response,'w') 

在 python 2.7.9 中似乎不起作用。响应是一个django.HttpResponse对象(据说是类似文件的),但它给出了一个错误" HttpResponse object does not have an attribute 'seek'。当在 python 2.7.0 或 2.7.6 中运行相同的代码时(我没有在其他版本中测试过)没关系......所以你最好用python 2.7.9测试它,看看你是否得到相同的行为。

于 2016-08-22T18:09:21.583 回答