在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类:class创建、数据方法属性及访问控制详解
Jul 25 Python
python 判断网络连通的实现方法
Apr 22 Python
在pandas多重索引multiIndex中选定指定索引的行方法
Nov 16 Python
Python从函数参数类型引出元组实例分析
May 28 Python
pandas读取CSV文件时查看修改各列的数据类型格式
Jul 07 Python
python networkx 包绘制复杂网络关系图的实现
Jul 10 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
Dec 06 Python
Pycharm安装并配置jupyter notebook的实现
May 18 Python
Python中内建模块collections如何使用
May 27 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
Oct 20 Python
Python descriptor(描述符)的实现
Nov 15 Python
Python基于mediainfo批量重命名图片文件
Dec 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
PHP环境搭建最新方法
2006/09/05 PHP
如何写php程序?
2006/12/08 PHP
PHP连接Access数据库的方法小结
2013/06/20 PHP
PHP生成等比缩略图类和自定义函数分享
2014/06/25 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
PHP Include文件实例讲解
2019/02/15 PHP
js+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
2011/03/10 Javascript
jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
2012/05/23 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
JQuery下拉框应用示例介绍
2014/04/23 Javascript
JS+CSS实现电子商务网站导航模板效果代码
2015/09/10 Javascript
JS 实现可停顿的垂直滚动实例代码
2016/11/23 Javascript
javascript中this关键字详解
2016/12/12 Javascript
jquery——九宫格大转盘抽奖实例
2017/01/16 Javascript
jQuery实现元素的插入
2017/02/27 Javascript
webpack多入口文件页面打包配置详解
2018/01/09 Javascript
Bootstrap的aria-label和aria-labelledby属性实例详解
2018/11/02 Javascript
vue2配置scss的方法步骤
2019/06/06 Javascript
微信小程序实现传递多个参数与事件处理
2019/08/12 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
[36:45]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python中requests和https使用简单示例
2018/01/18 Python
便捷提取python导入包的属性方法
2018/10/15 Python
Python 使用Numpy对矩阵进行转置的方法
2019/01/28 Python
Python+OpenCV实现实时眼动追踪的示例代码
2019/11/11 Python
使用Python实现正态分布、正态分布采样
2019/11/20 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
2020/03/16 Python
如何通过python计算圆周率PI
2020/11/11 Python
世嘉游戏英国官方商店:SEGA Shop UK
2019/09/20 全球购物
娇韵诗香港官网:Clarins香港
2020/08/13 全球购物
党员教师工作决心书
2014/03/13 职场文书
成绩单公证书
2014/04/10 职场文书
有子女的离婚协议书怎么写(范本)
2014/09/29 职场文书
民主生活会主持词
2015/07/01 职场文书
旅游投诉信范文
2015/07/02 职场文书
2016年党支部公开承诺书
2016/03/25 职场文书