Django输出csv文件

来源:互联网 发布:小说免费下载软件 编辑:程序博客网 时间:2024/05/17 03:48

CSV 是一种简单的数据格式,通常为电子表格软件所使用。 它主要是由一系列的表格行组成,每行中单元格之间使用逗号(CSV 是 逗号分隔数值(comma-separated values) 的缩写)隔开。例如,下面是一段csv格式的文本:

user,Chapter:1_sub,Chapter:2_sub,Chapter:3_sub,Chapter:4_sub,Chapter:5_sub,,Chapter:1_accu,Chapter:2_accu,Chapter:3_accu,Chapter:4_accu,Chapter:5_accu,
dq0208,0.000 ,0.000 ,4.787 ,0.000 ,0.000 ,,0.000 ,0.000 ,0.441 ,0.000 ,0.000 ,
dq0312,0.000 ,0.000 ,0.809 ,0.000 ,0.000 ,,0.000 ,0.000 ,0.417 ,0.000 ,0.000 ,
dq0225,0.000 ,0.000 ,4.472 ,0.000 ,0.000 ,,0.000 ,0.000 ,0.643 ,0.000 ,0.000 ,
dq0215,0.000 ,0.000 ,4.146 ,0.000 ,0.000 ,,0.000 ,0.000 ,0.574 ,0.000 ,0.000 ,
dq0432,0.000 ,0.000 ,2.169 ,0.000 ,0.000 ,,0.000 ,0.000 ,0.798 ,0.000 ,0.000 ,
dq0321,0.000 ,0.000 ,2.584 ,0.000 ,0.000 ,,0.000 ,0.000 ,0.652 ,0.000 ,0.000 ,
dq0216,0.000 ,0.000 ,2.461 ,0.000 ,0.000 ,,0.000 ,0.000 ,0.676 ,0.000 ,0.000 ,
dq0201,0.000 ,0.000 ,2.764 ,0.000 ,0.000 ,,0.000 ,0.000 ,0.598 ,0.000 ,0.000 ,
dq0344,0.000 ,0.000 ,4.596 ,0.000 ,0.000 ,,0.000 ,0.000 ,0.518 ,0.000 ,0.000 ,
dq0243,0.000 ,0.000 ,7.090 ,0.000 ,0.000 ,,0.000 ,0.000 ,0.537 ,0.000 ,0.000 ,
dq0424,0.000 ,0.000 ,2.989 ,0.000 ,0.000 ,,0.000 ,0.000 ,0.617 ,0.000 ,0.000 ,
dq0203,0.000 ,0.000 ,0.135 ,0.000 ,0.000 ,,0.000 ,0.000 ,0.833 ,0.000 ,0.000 ,
dq0214,0.000 ,0.000 ,3.539 ,0.000 ,0.000 ,,0.000 ,0.000 ,0.578 ,0.000 ,0.000 ,
dq0205,0.000 ,0.000 ,2.315 ,0.000 ,0.000 ,,0.000 ,0.000 ,0.602 ,0.000 ,0.000 ,
dq0444,0.000 ,0.000 ,1.382 ,0.000 ,0.000 ,,0.000 ,0.000 ,0.740 ,0.000 ,0.000 ,
dq0236,0.000 ,0.000 ,2.584 ,0.000 ,0.000 ,,0.000 ,0.000 ,0.683 ,0.000 ,0.000 ,
dq0242,0.000 ,0.000 ,1.775 ,0.000 ,0.000 ,,0.000 ,0.000 ,0.557 ,0.000 ,0.000 ,
dq0227,0.000 ,0.000 ,2.270 ,0.000 ,0.000 ,,0.000 ,0.000 ,0.634 ,0.000 ,0.000 ,
dq0426,0.000 ,0.000 ,6.787 ,0.508 ,0.000 ,,0.000 ,0.000 ,0.366 ,0.774 ,0.000 ,
dq0228,0.000 ,0.000 ,3.337 ,0.000 ,0.000 ,,0.000 ,0.000 ,0.529 ,0.000 ,0.000 ,
dq0220,0.000 ,0.000 ,3.281 ,0.000 ,0.000 ,,0.000 ,0.000 ,0.500 ,0.000 ,0.000 ,

Django返回csv格式的文件有两种方式,一种是在views.py文件里将HttpResponse对象当做一个变量传给csvwriter,还有一种是向HttpResponse传递一个迭代器,流式向客户端传递数据。
第一种方式的示例代码如下:

import csvfrom django.http import HttpResponseUNRULY_PASSENGERS = [146,184,235,200,226,251,299,273,281,304,203]def unruly_passengers_csv(request):    response = HttpResponse(mimetype='text/csv')    response['Content-Disposition'] = 'attachment; filename=unruly.csv'    writer = csv.writer(response)    writer.writerow(['Year', 'Unruly Airline Passengers'])    for (year, num) in zip(range(1995, 2006), UNRULY_PASSENGERS):        writer.writerow([year, num])    return response

第二种方式可以使用yield:

def all_download_statements(request):    basepath=os.getcwd()    filename=basepath+'/static_generate_files/all_statements.csv'    def file_iterator(file_name, chunk_size=5120):        with open(file_name) as f:            while True:                c = f.read(chunk_size)                if c:                    yield c                else:                    break    response = HttpResponse(file_iterator(filename))    response['Content-Type'] = 'application/octet-stream'    response['Content-Disposition'] = 'attachment;filename="all_statements.csv"'    return response
0 0
原创粉丝点击