在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 tempfile模块学习笔记(临时文件)
May 25 Python
pycharm 使用心得(八)如何调用另一文件中的函数
Jun 06 Python
Python实现处理管道的方法
Jun 04 Python
小议Python中自定义函数的可变参数的使用及注意点
Jun 21 Python
Python对列表去重的多种方法(四种方法)
Dec 05 Python
Python3实现发送QQ邮件功能(文本)
Dec 15 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
Mar 11 Python
python pandas写入excel文件的方法示例
Jun 25 Python
django创建超级用户过程解析
Sep 18 Python
python 爬虫百度地图的信息界面的实现方法
Oct 27 Python
python 线程的五个状态
Sep 22 Python
Python抖音快手代码舞(字符舞)的实现方法
Feb 07 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实时显示输出
2008/10/02 PHP
php 判断数组是几维数组
2013/03/20 PHP
PHP获取文件夹大小函数用法实例
2015/07/01 PHP
php函数连续调用实例分析
2015/07/30 PHP
thinkphp微信开发(消息加密解密)
2015/12/02 PHP
jQuery autocomplete插件修改
2009/04/17 Javascript
JavaScript的变量作用域深入理解
2009/10/25 Javascript
关于可运行代码无法正常执行的使用说明
2010/05/13 Javascript
详解jQuery插件开发中的extend方法
2013/11/19 Javascript
使用ngView配合AngularJS应用实现动画效果的方法
2015/06/19 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
2015/09/07 Javascript
JavaScript正则表达式的分组匹配详解
2016/02/13 Javascript
jQuery中iframe的操作(点击按钮新增窗口)
2016/04/20 Javascript
AngularJS 依赖注入详解和简单实例
2016/07/28 Javascript
jQuery复制节点用法示例(clone方法)
2016/09/08 Javascript
JavaScript中在光标处插入添加文本标签节点的详细方法
2017/03/22 Javascript
基于jQuery的$.getScript方法去加载javaScript文档解析
2017/11/08 jQuery
基于JavaScript实现表格滚动分页
2017/11/22 Javascript
浅谈Postman解决token传参的问题
2018/03/31 Javascript
利用js将ajax获取到的后台数据动态加载至网页中的方法
2018/08/08 Javascript
ng-zorro-antd 入门初体验
2018/12/03 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
jQuery实现简单日历效果
2020/07/05 jQuery
js动态生成表格(节点操作)
2021/01/12 Javascript
Python3中正则模块re.compile、re.match及re.search函数用法详解
2018/06/11 Python
可能是最全面的 Python 字符串拼接总结【收藏】
2018/07/09 Python
python制作简单五子棋游戏
2019/06/18 Python
python爬虫实现POST request payload形式的请求
2020/04/30 Python
解决Django Haystack全文检索为空的问题
2020/05/19 Python
html5 postMessage前端跨域并前端监听的方法示例
2018/11/01 HTML / CSS
微软日本官方网站:Microsoft日本
2017/11/26 全球购物
英语系本科生求职信
2014/07/15 职场文书
单位委托书格式范本
2014/09/29 职场文书
客房服务员岗位职责
2015/02/09 职场文书
《珍珠鸟》教学反思
2016/02/16 职场文书
CSS几步实现赛博朋克2077风格视觉效果
2021/06/16 HTML / CSS