在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 httplib,smtplib使用方法
Sep 06 Python
Python获取脚本所在目录的正确方法
Apr 15 Python
Python实现模拟登录及表单提交的方法
Jul 25 Python
Python 3.x 连接数据库示例(pymysql 方式)
Jan 19 Python
使用Python & Flask 实现RESTful Web API的实例
Sep 19 Python
Python将文本去空格并保存到txt文件中的实例
Jul 24 Python
值得收藏,Python 开发中的高级技巧
Nov 23 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
Dec 29 Python
python实现批量nii文件转换为png图像
Jul 18 Python
pygame实现俄罗斯方块游戏(基础篇1)
Oct 29 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
Feb 26 Python
详解Python中的文件操作
Jan 14 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得到某段时间区间的时间戳 php定时任务
2012/04/12 PHP
PHP中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
PHP error_log()将错误信息写入一个文件(定义和用法)
2013/10/25 PHP
php实现对短信验证码发送次数的限制实例讲解
2021/03/04 PHP
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
2009/07/25 Javascript
javascript parseInt 大改造
2009/09/27 Javascript
DOM 脚本编程中的兄弟节点
2009/10/31 Javascript
js 省地市级联选择
2010/02/07 Javascript
Jquery 实现grid绑定模板
2015/01/28 Javascript
JavaScript获取页面上被选中文字的方法技巧
2015/03/13 Javascript
window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
2015/11/11 Javascript
jQuery之动画效果大全
2016/11/09 Javascript
详解微信小程序设置底部导航栏目方法
2017/06/29 Javascript
nodejs 图片预览和上传的示例代码
2017/09/30 NodeJs
基于vue打包后字体和图片资源失效问题的解决方法
2018/03/06 Javascript
Element-UI踩坑之Pagination组件的使用
2018/10/29 Javascript
微信小程序导航栏滑动定位功能示例(实现CSS3的positionsticky效果)
2019/01/24 Javascript
微信小程序中转义字符的处理方法
2019/03/28 Javascript
js实现聊天对话框
2020/02/08 Javascript
vue2.0实现列表数据增加和删除
2020/06/17 Javascript
python实现百度关键词排名查询
2014/03/30 Python
Python单元测试框架unittest使用方法讲解
2015/04/13 Python
Python中pygame安装方法图文详解
2015/11/11 Python
浅谈Python由__dict__和dir()引发的一些思考
2017/10/30 Python
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
使用Python画股票的K线图的方法步骤
2019/06/28 Python
tensorflow查看ckpt各节点名称实例
2020/01/21 Python
廉价连衣裙和婚纱礼服在线销售:Tbdress
2019/02/28 全球购物
英国绿色商店:Natural Collection
2019/05/03 全球购物
会计应届生的自荐信
2013/12/13 职场文书
小学生环保标语
2014/06/13 职场文书
四风问题自我剖析材料
2014/10/07 职场文书
财务总监岗位职责范本
2015/04/03 职场文书
病危通知单
2015/04/17 职场文书
初中数学课堂教学反思
2016/02/17 职场文书
读《庄子》有感:美而不自知
2019/11/06 职场文书