priestc priestc - 3 months ago 30
Python Question

Confused about making a CSV file into a ZIP file in django

I have a view that takes data from my site and then makes it into a zip compressed csv file. Here is my working code 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


and it works great. Now I want that file to be compressed before it gets sent out. This is where I get stuck.

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


But thats not it and I have no idea how to do this.

Answer

OK I got it. Here is my new function:

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