在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删除文件示例分享
Jan 28 Python
python开发简易版在线音乐播放器
Mar 03 Python
详解K-means算法在Python中的实现
Dec 05 Python
深入浅析Python中的yield关键字
Jan 24 Python
为什么入门大数据选择Python而不是Java?
Mar 07 Python
python中找出numpy array数组的最值及其索引方法
Apr 17 Python
python使用opencv驱动摄像头的方法
Aug 03 Python
Python中文件的写入读取以及附加文字方法
Jan 23 Python
python 监测内存和cpu的使用率实例
Nov 28 Python
python输出第n个默尼森数的实现示例
Mar 08 Python
基于Python实现体育彩票选号器功能代码实例
Sep 16 Python
Python打包exe时各种异常处理方案总结
May 18 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/10/09 PHP
phpmailer在服务器上不能正常发送邮件的解决办法
2014/07/08 PHP
使用ltrace工具跟踪PHP库函数调用的方法
2016/04/25 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
laravel请求参数校验方法
2019/10/10 PHP
让你的博文自动带上缩址的实现代码,方便发到微博客上
2010/12/28 Javascript
JavaScript之HTMLCollection接口代码
2011/04/27 Javascript
jquery加载页面的方法(页面加载完成就执行)
2011/06/21 Javascript
JQuery 实现在同一页面锚点链接之间的平滑滚动
2014/10/29 Javascript
js进行表单验证实例分析
2015/02/10 Javascript
JavaScript对HTML DOM使用EventListener进行操作
2015/10/21 Javascript
基于javascript实现tab切换特效
2016/03/29 Javascript
jquery的checkbox,radio,select等方法小结
2016/08/30 Javascript
jQuery动态修改字体大小的方法【测试可用】
2016/09/09 Javascript
基于angularJS的表单验证指令介绍
2016/10/21 Javascript
JavaScript中访问id对象 属性的方式访问属性(实例代码)
2016/10/28 Javascript
jQuery中值得注意的trigger方法浅析
2016/12/12 Javascript
详解Vue方法与事件
2017/03/09 Javascript
使用mock.js随机数据和使用express输出json接口的实现方法
2018/01/07 Javascript
Vue 中mixin 的用法详解
2018/04/23 Javascript
ionic使用angularjs表单验证(模板验证)
2018/12/12 Javascript
JS实现二维数组元素的排列组合运算简单示例
2019/01/28 Javascript
详解javascript设计模式三:代理模式
2019/03/25 Javascript
[01:07:13]TNC vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
极简的Python入门指引
2015/04/01 Python
Python循环结构的应用场景详解
2019/07/11 Python
Django实现web端tailf日志文件功能及实例详解
2019/07/28 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
2020/04/14 Python
Manuka Doctor英国官网:真正的麦卢卡蜂蜜和护肤品
2018/10/26 全球购物
架构师岗位职责
2013/11/18 职场文书
中央空调节能方案
2014/06/15 职场文书
2015年教师个人业务工作总结
2015/10/23 职场文书
股权投资协议书
2016/03/23 职场文书
Python OpenCV 图像平移的实现示例
2021/06/04 Python
Vue组件化(ref,props, mixin,.插件)详解
2022/05/15 Vue.js
html解决浏览器记住密码输入框的问题
2023/05/07 HTML / CSS