在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开发中如何使用Hook技巧
Nov 01 Python
让Python更加充分的使用Sqlite3
Dec 11 Python
ubuntu安装mysql pycharm sublime
Feb 20 Python
Python3.5集合及其常见运算实例详解
May 01 Python
python flask解析json数据不完整的解决方法
May 26 Python
python中property属性的介绍及其应用详解
Aug 29 Python
python multiprocessing多进程变量共享与加锁的实现
Oct 02 Python
django ListView的使用 ListView中获取url中的参数值方式
Mar 27 Python
Python pandas 列转行操作详解(类似hive中explode方法)
May 18 Python
pytorch读取图像数据转成opencv格式实例
Jun 02 Python
安装python依赖包psycopg2来调用postgresql的操作
Jan 01 Python
python 求两个向量的顺时针夹角操作
Mar 04 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
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
2016/03/30 PHP
laravel config文件配置全局变量的例子
2019/10/13 PHP
JS date对象的减法处理实现代码
2010/12/28 Javascript
JS焦点图切换,上下翻转
2011/05/12 Javascript
js左侧三级菜单导航实例代码
2013/09/13 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
原生js仿jq判断当前浏览器是否为ie,精确到ie6~8
2014/08/30 Javascript
jquery滚动加载数据的方法
2015/03/09 Javascript
jquery简单实现图片切换效果的方法
2015/05/12 Javascript
JS实现从连接中获取youtube的key实例
2015/07/02 Javascript
jQuery实现类似标签风格的导航菜单效果代码
2015/08/25 Javascript
javascript下拉列表中显示树形菜单的实现方法
2015/11/17 Javascript
javascript的正则匹配方法学习
2016/02/24 Javascript
Javascript中浏览器窗口的基本操作总结
2016/08/18 Javascript
Bootstrap如何创建表单
2016/10/21 Javascript
如何防止INPUT按回车自动提交表单FORM
2016/12/06 Javascript
Angularjs 动态改变title标题(兼容ios)
2016/12/29 Javascript
微信小程序五星评分效果实现代码
2017/04/06 Javascript
jQuery.form.js的使用详解
2017/06/14 jQuery
用vue构建多页面应用的示例代码
2017/09/20 Javascript
基于Vue实现图书管理功能
2017/10/17 Javascript
详解NodeJS Https HSM双向认证实现
2019/03/12 NodeJs
[04:27]2014DOTA2国际邀请赛 NAVI战队官方纪录片
2014/07/21 DOTA
python单例模式实例分析
2015/04/08 Python
浅谈python类属性的访问、设置和删除方法
2016/07/25 Python
插入排序_Python与PHP的实现版(推荐)
2017/05/11 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
2018/04/17 Python
Django中数据库的数据关系:一对一,一对多,多对多
2018/10/21 Python
Java中实现多态的机制是什么?
2014/12/07 面试题
四群教育工作实施方案
2014/03/26 职场文书
QQ空间主人寄语大全
2014/04/12 职场文书
流动人口婚育证明
2014/10/19 职场文书
迟到检讨书范文
2015/01/27 职场文书
物业前台接待岗位职责
2015/04/03 职场文书
酒店温馨提示语
2015/07/14 职场文书
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技