108:生成和下载csv文件

Posted zheng-weimin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了108:生成和下载csv文件相关的知识,希望对你有一定的参考价值。

生成CSV文件:

有时候我们做的网站,需要将一些数据,生成有一个CSV文件给浏览器,并且是作为附件的形式下载下来。以下将讲解如何生成CSV文件。

生成小的CSV文件:

这里将用一个生成小的CSV文件为例,来把生成CSV文件的技术要点讲到位。我们用Python内置的csv模块来处理csv文件,并且使用HttpResponse来将csv文件返回回去。示例代码如下:

from django.http import HttpResponse, JsonResponse
import json, csv


def small_csv(request):
    response = HttpResponse(content_type=text/csv)
    response[Content-Disposition] =  "attachment;filename=‘userinfo.csv‘"
    my_write = csv.writer(response)
    my_write.writerow([username,age])
    my_write.writerow([tom,21])
    my_write.writerow([jack,22])
    return response

这里再来对每个部分的代码进行解释:

  • 我们在初始化HttpResponse的时候,指定了Content-Type为text/csv,这将告诉浏览器,这是一个csv格式的文件而不是一个html格式的文件,如果用默认值,默认值就是html,那么浏览器将把csv格式的文件按照html格式输出,这肯定不是我们想要的。
  • 第二个我们还在response中添加一个Content-Disposition头,这个东西是用来告诉浏览器该如何处理这个文件,我们给这个头的值设置为attachment;,那么浏览器将不会对这个文件进行显示,而是作为附件的形式下载,第二个filename="somefilename.csv"是用来指定这个csv文件的名字。
  • 我们使用csv模块的writer方法,将相应的数据写入到response中。

csv文件定义成模板:

我们还可以将csv格式的文件定义成模板,然后使用Django内置的模板系统,并给这个模板传入一个Context对象,这样模板系统就会根据传入的Context对象,生成具体的csv文件。示例代码如下:

模板文件:

# 文件路径是:工程template目录下:
{% for row in rows %}{{ row.0 }},{{ row.1 }}
{% endfor %}

视图函数:

def template_csv(request):
    resp = HttpResponse(content_type=text/csv)
    resp[Content-Disposition] = "attachment;filename=‘templateinfo.csv‘"
    context = {
        rows:
            [
                [username, age],
                [bob,19],
                [marry, 20],
            ]
    }
    template =loader.get_template(template.txt)
    csv_template = template.render(context)
    resp.content = csv_template
    return resp

 

以上是关于108:生成和下载csv文件的主要内容,如果未能解决你的问题,请参考以下文章

Golanggin csv 生成及下载

Golanggin csv 生成及下载

Golanggin csv 生成及下载

109:大型CSV文件的处理方式

python 读取多个csv文件中某一列,并生成一个新csv文件

nzSQLException 读取超时错误