zip_longest(*)将所有输入的对象行转置为列,返回长度与最长的对象相同的列表,运用此方法,writer对象会将原列表以列的形式写入csv文件。
def test(request):
from itertools import zip_longest
list1=[1,2]
list2=[3,4,5]
list_head=['list1','list2']
list_value=[list1,list2]
export_data = zip_longest(*list_value, fillvalue='')
# 会在writer对象中将列表以列的形式写入csv文件
response = HttpResponse(content_type='text/csv')#定义一个HttpResponse,类型是csv
response['Content-Disposition'] = "attachment;filename=file.csv"#定义返回的信息,以附件方式下载及文件名称;
import csv
wr = csv.writer(response)
wr.writerow(list_head)
wr.writerows(export_data)
return response
对于生成数据量不大的文件,可以使用HttpResponse将数据存入内存然后再输出:
- response = HttpResponse(content_type='text/csv') 定义一个HttpResponse,类型为csv格式的文件;如果用默认值(html),那么最终会返回html格式的文件。
- response['Content-Disposition'] = "attachment;filename=file.csv" attachment表示将此文件作为附件的形式下载,filename=file.csv用来指定csv文件的名字。(注意file.csv不要加引号,有可能输出格式错误)
测试:
输入网址:
打开文件: