在Python的Django框架中生成CSV文件的方法


Posted in Python onJuly 22, 2015

CSV 是一种简单的数据格式,通常为电子表格软件所使用。 它主要是由一系列的表格行组成,每行中单元格之间使用逗号(CSV 是 逗号分隔数值(comma-separated values) 的缩写)隔开。例如,下面是CSV格式的“不守规矩”的飞机乘客表。

Year,Unruly Airline Passengers
1995,146
1996,184
1997,235
1998,200
1999,226
2000,251
2001,299
2002,273
2003,281
2004,304
2005,203
2006,134
2007,147

备注

前面的列表包含真实数据。 这些数据来自美国 联邦航空管理局。

CSV格式尽管看起来简单,却是全球通用的。 但是不同的软件会生成和使用不同的 CSV 的变种,在使用上会有一些不便。 幸运的是, Python 使用的是标准 CSV 库, csv ,所以它更通用。

因为 csv 模块操作的是类似文件的对象,所以可以使用 HttpResponse 替换:

import csv
from django.http import HttpResponse

# Number of unruly passengers each year 1995 - 2005. In a real application
# this would likely come from a database or some other back-end data store.
UNRULY_PASSENGERS = [146,184,235,200,226,251,299,273,281,304,203]

def unruly_passengers_csv(request):
  # Create the HttpResponse object with the appropriate CSV header.
  response = HttpResponse(mimetype='text/csv')
  response['Content-Disposition'] = 'attachment; filename=unruly.csv'

  # Create the CSV writer using the HttpResponse as the "file."
  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

代码和注释可以说是很清楚,但还有一些事情需要特别注意:

  •     响应返回的是 text/csv MIME类型(而非默认的 text/html )。这会告诉浏览器,返回的文档是CSV文件。
  •     响应会有一个附加的 Content-Disposition 头部,它包含有CSV文件的文件名。 这个头部(或者说,附加部分)会指示浏览器弹出对话框询问文件存放的位置(而不仅仅是显示)。 这个文件名是任意的。 它会显示在浏览器的另存为对话框中。
  •     要在HttpResponse指定头部信息,只需把HttpResponse当做字典使用就可以了。
  •     与创建CSV的应用程序界面(API)挂接是很容易的: 只需将 response 作为第一个变量传递给 csv.writer 。 csv.writer 函数需要一个文件类的对象, HttpResponse 正好能达成这个目的。
  •     调用 writer.writerow ,并且传递给它一个类似 list 或者 tuple 的可迭代对象,就可以在 CSV 文件中写入一行。
  •     CSV 模块考虑到了引用的问题,所以您不用担心逸出字符串中引号和逗号。 只要把信息传递给 writerow() ,它会处理好所有的事情。

在任何需要返回非 HTML 内容的时候,都需要经过以下几步: 创建一个 HttpResponse 响应对象(需要指定特殊的 MIME 类型),它它传给需要处理文件的函数,然后返回这个响应对象。

Python 相关文章推荐
python的id()函数解密过程
Dec 25 Python
python对url格式解析的方法
May 13 Python
Python查询IP地址归属完整代码
Jun 21 Python
python 利用栈和队列模拟递归的过程
May 29 Python
Django实现跨域的2种方法
Jul 31 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
Aug 05 Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
Aug 06 Python
Python 中判断列表是否为空的方法
Nov 24 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
Jan 02 Python
通过实例学习Python Excel操作
Jan 06 Python
python 使用tkinter+you-get实现视频下载器
Nov 17 Python
详解OpenCV曝光融合
Apr 29 Python
在主机商的共享服务器上部署Django站点的方法
Jul 22 #Python
在Lighttpd服务器中运行Django应用的方法
Jul 22 #Python
简单的Apache+FastCGI+Django配置指南
Jul 22 #Python
使用FastCGI部署Python的Django应用的教程
Jul 22 #Python
使用相同的Apache实例来运行Django和Media文件
Jul 22 #Python
在Apache服务器上同时运行多个Django程序的方法
Jul 22 #Python
通过mod_python配置运行在Apache上的Django框架
Jul 22 #Python
You might like
pw的一个放后门的方法分析
2007/10/08 PHP
PHP explode()函数用法、切分字符串
2012/10/03 PHP
深入PHP nl2br()格式化输出的详解
2013/06/05 PHP
php+mysql实现用户注册登陆的方法
2015/01/03 PHP
php验证身份证号码正确性的函数
2016/07/20 PHP
PHP面向对象程序设计之对象生成方法详解
2016/12/02 PHP
PHP中命名空间的使用例子
2019/03/22 PHP
给Javascript数组插入一条记录的代码
2007/08/30 Javascript
jQuery学习笔记之jQuery动画效果
2013/09/09 Javascript
js获取多个tagname的节点数组
2013/09/22 Javascript
jquery.autocomplete修改实现键盘上下键自动填充示例
2013/11/19 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
jquery实现超简洁的TAB选项卡效果代码
2015/08/28 Javascript
js格式化输入框内金额、银行卡号
2016/02/01 Javascript
浅析javascript函数表达式
2016/02/10 Javascript
jQuery实现右下角可缩放大小的层完整实例
2016/06/20 Javascript
利用js获取下拉框中所选的值
2016/12/01 Javascript
Angular2下使用pdf插件的方法详解
2017/04/29 Javascript
Javascript 编码约定(编码规范)
2018/03/11 Javascript
jQuery+ajax读取json数据并按照价格排序示例
2018/03/28 jQuery
webpack4 入门最简单的例子介绍
2018/09/05 Javascript
javascript用defineProperty实现简单的双向绑定方法
2020/04/03 Javascript
vue实现单一筛选、删除筛选条件
2020/10/26 Javascript
[01:10:49]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
python使用循环实现批量创建文件夹示例
2014/03/25 Python
python变量的存储原理详解
2019/07/10 Python
美国钻石商店:Zales
2016/11/20 全球购物
草莓巧克力:Shari’s Berries
2017/02/07 全球购物
回门宴父母答谢词
2014/01/26 职场文书
《美丽的小路》教学反思
2014/02/26 职场文书
大一新生学期自我评价
2014/04/09 职场文书
乡镇四风对照检查材料
2014/08/31 职场文书
师范生见习自我总结
2015/06/23 职场文书
2015年街道办事处团委工作总结
2015/10/14 职场文书
2016春季校长开学典礼致辞
2015/11/26 职场文书
uniapp开发打包多端应用完整方法指南
2022/12/24 Javascript