在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多线程http下载实现示例
Dec 30 Python
Python列表切片用法示例
Apr 19 Python
python 中split 和 strip的实例详解
Jul 12 Python
tensorflow实现逻辑回归模型
Sep 08 Python
python实现写数字文件名的递增保存文件方法
Oct 25 Python
详解django自定义中间件处理
Nov 21 Python
python实现中文文本分句的例子
Jul 15 Python
Python全栈之列表数据类型详解
Oct 01 Python
浅谈python中统计计数的几种方法和Counter详解
Nov 07 Python
使用pandas的box_plot去除异常值
Dec 10 Python
pytorch标签转onehot形式实例
Jan 02 Python
pytorch SENet实现案例
Jun 24 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
深入理解PHP中的Session和Cookie
2013/06/21 PHP
学习php分页代码实例
2013/10/24 PHP
Codeigniter中禁止A Database Error Occurred错误提示的方法
2014/06/12 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
PHP针对多用户实现更换头像功能
2016/09/04 PHP
分析 JavaScript 中令人困惑的变量赋值
2007/08/13 Javascript
jQuery学习笔记 操作jQuery对象 文档处理
2012/09/19 Javascript
Jquery 获取指定标签的对象及属性的设置与移除
2014/05/29 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
javascript等号运算符使用详解
2015/04/16 Javascript
javascript实现的淘宝旅行通用日历组件用法实例
2015/08/03 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
2015/08/11 Javascript
页面内容排序插件jSort使用方法
2015/10/10 Javascript
18个非常棒的jQuery代码片段
2015/11/02 Javascript
checkbox 选中一个另一个checkbox也会选中的实现代码
2016/07/09 Javascript
nodejs redis 发布订阅机制封装实现方法及实例代码
2016/12/15 NodeJs
解决bootstrap下拉菜单点击立即隐藏bug的方法
2017/06/13 Javascript
JavaScript实现换肤功能
2017/09/15 Javascript
React-Router如何进行页面权限管理的方法
2017/12/06 Javascript
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
[04:02]2014DOTA2国际邀请赛 BBC每日综述中国战队将再度登顶
2014/07/21 DOTA
[01:15:29]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第三局
2016/03/04 DOTA
使用Python的Bottle框架写一个简单的服务接口的示例
2015/08/25 Python
Python实现爬虫抓取与读写、追加到excel文件操作示例
2018/06/27 Python
python中的插值 scipy-interp的实现代码
2018/07/23 Python
Python神奇的内置函数locals的实例讲解
2019/02/22 Python
使用python实现抓取腾讯视频所有电影的爬虫
2019/04/15 Python
python 图像处理画一个正弦函数代码实例
2019/09/10 Python
Python3 获取文件属性的方式(时间、大小等)
2020/03/12 Python
Python Flask上下文管理机制实例解析
2020/03/16 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
2020/04/21 Python
ALDI奥乐齐官方海外旗舰店:德国百年超市
2017/12/27 全球购物
小学校长竞聘演讲稿
2014/05/16 职场文书
求职信怎么写范文
2014/05/26 职场文书
2016年学校禁毒宣传活动工作总结
2016/04/05 职场文书
写好Python代码的几条重要技巧
2021/05/21 Python