在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实现strcmp函数功能示例
Mar 25 Python
跟老齐学Python之集合(set)
Sep 24 Python
python中字符串类型json操作的注意事项
May 02 Python
Python编程之序列操作实例详解
Jul 22 Python
给 TensorFlow 变量进行赋值的方式
Feb 10 Python
python实现文字版扫雷
Apr 24 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
Oct 04 Python
Python爬虫之Selenium多窗口切换的实现
Dec 04 Python
使用gunicorn部署django项目的问题
Dec 30 Python
如何解决.cuda()加载用时很长的问题
May 24 Python
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
Jun 11 Python
详解在OpenCV中如何使用图像像素
Mar 03 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中fwrite与file_put_contents性能测试代码
2013/08/02 PHP
PHP安装threads多线程扩展基础教程
2015/11/17 PHP
PHP单文件上传原理及上传函数的封装操作示例
2019/09/02 PHP
初学JavaScript第二章
2008/09/30 Javascript
javaScript(JS)替换节点实现思路介绍
2013/04/17 Javascript
jquery 触发a链接点击事件解决方案
2013/05/02 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
2013/11/20 Javascript
jquery中的工具使用方法$.isFunction, $.isArray(), $.isWindow()
2015/08/09 Javascript
基于OL2实现百度地图ABCD marker的效果
2015/10/01 Javascript
jQuery绑定事件监听bind和移除事件监听unbind用法实例详解
2016/01/19 Javascript
Javascript基础教程之比较null和undefined值
2016/05/16 Javascript
浅谈react 同构之样式直出
2017/11/07 Javascript
nodejs的路径问题的解决
2018/06/30 NodeJs
swiper在vue项目中loop循环轮播失效的解决方法
2018/09/15 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
2019/03/26 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
[01:34]DAC2018主赛事第四日五佳镜头 Gh巨牙海民助Miracle-死里逃生
2018/04/07 DOTA
[43:33]EG vs Spirit Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
Python文件右键找不到IDLE打开项解决办法
2015/06/08 Python
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
2016/01/20 Python
使用python绘制常用的图表
2016/08/27 Python
Python利用神经网络解决非线性回归问题实例详解
2019/07/19 Python
python双端队列原理、实现与使用方法分析
2019/11/27 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
解决python 执行sql语句时所传参数含有单引号的问题
2020/06/06 Python
Python Matplotlib简易教程(小白教程)
2020/07/28 Python
详解python内置模块urllib
2020/09/09 Python
德国体育用品网上商店:SC24.com
2016/08/01 全球购物
精选鞋类、服装和配饰的全球领先目的地:Bodega
2021/02/27 全球购物
大学生职业生涯规划书
2014/03/14 职场文书
文体活动实施方案
2014/03/27 职场文书
12.4法制宣传日活动总结
2014/08/26 职场文书
材料采购员岗位职责
2015/04/03 职场文书
党小组考察意见
2015/06/02 职场文书
Python数据分析入门之教你怎么搭建环境
2021/05/13 Python
MySQL基于索引的压力测试的实现
2021/11/07 MySQL