对于在django中将CSV文件制作成ZIP文件感到困惑

时间:2009-09-10 04:57:23

标签: python django zipfile

我有一个视图,从我的网站获取数据,然后将其转换为zip压缩的csv文件。这是我的工作代码sans 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

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

3 个答案:

答案 0 :(得分:5)

请注意,在工作案例中,您return response ...以及在非工作案例中,您返回z {{1}当然(虽然它应该是!)。

所以:在HttpResponse上使用csv_writer NOT,但在临时文件上;压缩临时文件;并将那个压缩的字节流写入response

答案 1 :(得分:5)

好的,我明白了。这是我的新功能:

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

答案 2 :(得分:1)

zipfile.ZipFile(response,'w') 

似乎无法在python 2.7.9中运行。 响应 是一个 django.HttpResponse 对象(据说它类似于文件),但它会出错&#34 ; HttpResponse对象没有属性' seek' 。当在python 2.7.0或2.7.6中运行相同的代码时(我还没有在其他版本中对它进行测试)没关系......所以你最好用python 2.7.9测试它并看看如果你得到同样的行为。