109.大型的csv文件的处理方式
HttpResponse对象将会将响应的数据作为一个整体返回,此时如果数据量非常大的话,长时间浏览器没有得到服务器的响应,就会超过默认的超时时间,返回超时。而StreamingHttpResponse会将响应的数据作为一个数据流返回给浏览器,这样浏览器就可以接收到服务器发送过来的数据,不会因为长期没有得到服务器的回应而返回超时。
StreamingHttpResponse:
这个类是专门用来处理流数据的,使得在处理一些大型文件的时候,不会因为服务器处理时间过长而连接超时。这个类并不是继承HttpResponse,而是继承HttpResponseBase,并且跟HttpResponse对比有以下几点区别:
(1)这个类没有一个属性content,相反是streaming_content。
(2)这个类的streaming_content必须是一个可以迭代的对象。
(3)这个类没有write方法,如果给这个类的对象写入数据将会报错。
注意:StreamingHttpResponse会启动一个进程类和客户端保持长连接,所以会很消耗资源,所以如果不是特殊要求,尽量少用这种方法。
1.使用StreamingHttpResponse生成大型csv文件并且下载,在浏览器中进行访问的时候,要注意观察浏览器的左下角的加载,或者说是进行安全连接的时间以及下载的时间,示例代码如下:
from django.http import HttpResponse, StreamingHttpResponse
from django.template import loader
# 定义一个类Echo,实现write方法
class Echo:
def write(self, value):
return value
def large_csv(request):
# 得到一个StreamingHttpResponse对象,并且设置文件的类型为csv
response = StreamingHttpResponse(content_type='text/csv')
# 不显示文件的内容,只是可以进行下载,并且设置文件的名字
response['Content-Disposition'] = "attachment; filename=large_csv.csv"
# 因为StreamingHttpResponse对象传递的第一个参数必须是可以迭代的对象
# ()中使用for ... in ...进行遍历,我们就可以得到一个生成器一样的对象,生成器并不会把数据一次性的返回
rows = ("row {},{}\n".format(row,row) for row in range(0,10000000))
# 使用format()函数将后面的(row,row)与字符串中的{}进行替换
response.streaming_content = rows
return response
2.使用HttpResponse获取大型的csv文件并进行下载,一定要注意观察浏览器左下角文件在加载是的安全连接时间以及下载的时间,示例代码如下:
from django.http import HttpResponse
import csv
def large_view(request):
# 初始化
response = HttpResponse(content_type='text/csv')
# 指定文件不显示文件内容,可以作为附件进行下载,并且指定文件名
response['Content-Disposition'] = "attachment; filename=large_csc.csv"
<!--使用python内置的csv模块中的write()方法向response对象写入数据-->
writer = csv.writer(response)
for row in range(0,10000000):
writer.writerow(['row {}'.format(row),'row'.format(row)])
return response
109.大型的csv文件的处理方式的更多相关文章
- Django学习笔记之视图高级-CSV文件生成
生成CSV文件 有时候我们做的网站,需要将一些数据,生成有一个CSV文件给浏览器,并且是作为附件的形式下载下来.以下将讲解如何生成CSV文件. 生成小的CSV文件 这里将用一个生成小的CSV文件为例. ...
- Django生成CSV文件
1.生成CSV文件 有时候我们做的网站,需要将一些数据,生成有一个CSV文件给浏览器,并且是作为附件的形式下载下来.以下将讲解如何生成CSV文件. 2.生成小的CSV文件 这里将用一个生成小的CSV文 ...
- Android Sqlite 导入CSV文件 .
http://blog.csdn.net/johnnycode/article/details/7413111 今天遇到 Oracle 导出的12万条CSV格式数据导入 Android Sqlite ...
- PHP导出CSV文件出现乱码的解决方法
在做项目时碰到使用外语的情况下,我们就会使用UTF-8编码.但是,在用PHP导出CSV文件时,如果写入的数据是使用UTF-8编码的日语.韩语之类的外文,就会出现乱码. 要解决PHP生成CSV文件的乱码 ...
- python之读取和写入csv文件
写入csv文件源码: #输出数据写入CSV文件 import csv data = [ ("Mike", "male", 24), ("Lee&quo ...
- Pandas 基础(4) - 读/写 Excel 和 CSV 文件
这一节将分别介绍读/写 Excel 和 CSV 文件的各种方式: - 读入 CSV 文件 首先是准备一个 csv 文件, 这里我用的是 stock_data.csv, 文件我已上传, 大家可以直接下载 ...
- Python 编程快速上手 第十四章 处理 CSV 文件和 JSON 数据
前言 这一章分为两个部分,处理 CSV 格式的数据和处理 JSON 格式个数据. 处理 CSV 理解 csv csv 的每一行代表了电子表格中的每一行,每个逗号分开两个单元格csv 的内容全部为文本, ...
- 【其他】csv文件打开是乱码,怎么办?
csv文件打开是乱码,怎么办?管用的方法,一个就够 工作中,将python生成的中间结果文件写入CSV,经常这么干是不是?文件保存下来后用excel打开,出现了乱码情况,真心烦.为什么? CSV是用U ...
- Excel打开csv文件乱码问题的解决办法
excel打开csv 出现乱码怎么解决 https://jingyan.baidu.com/article/ac6a9a5e4c681b2b653eacf1.html CSV是逗号分隔值的英文缩写,通 ...
随机推荐
- linux下anaconda的安装和使用
1.将python3设置为默认 直接执行这两个命令即可: sudo update-alternatives --install /usr/bin/python python /usr/bin/pyth ...
- 13.56mhz自动寻卡功能业界最低功耗:SI522
随着智能门锁的不断火爆,很多智能门锁产商为了让产品的功耗下降下来,都在不断寻找能自动寻卡的13.56mhz.今天我就为大家推荐一款13.56mhz芯片自动寻卡业界最低功耗,不仅是业界最低另外还完全PI ...
- 文本编辑器vim/vi——末行模式
指令格式: #vim 文件路径作用:打开指定的文件. 进入方式:由命令模式进入,按下“:”或者“/(表示查找)”即可进入 退出方式: a. 按下esc b. 连按2次esc键 c. 删除末行全部输入字 ...
- C++实现单链表的12种基本操作
C++单链表的操作2017-12-25 1 // 单链表.cpp: 定义控制台应用程序的入口点. //Author:kgvito //Date: 2017.12.25 #include "s ...
- 七十四、SAP中内表的4中删除方法
一.代码如下 二.效果如下 *&---------------------------------------------------------------------* *& Re ...
- 三十七、SAP中文本资源的存放
一.我们看看之前的代码内容 二.菜单转到->文本元素 三.在文本符号中写入需要替换的内容 四.修改一下代码,可以用text-001来等效替换 五.效果如下
- 092-PHP定义索引数组
<?php $arr=array('name'=>'PHP','age'=>22,7=>25,33,21=>35,56); //定义一个索引数组 echo '数组$arr ...
- oracle学习笔记(4)
4.oracle数据库的启动流程 windows操作系统 启动监听: lsnrctl start; 启动数据库实例:oradim-startup-sid 实例名 linux系统 启动监听:lsnrct ...
- 代码化UI设计
最近在阅读Qt 5.9 C++开发指南,为了加深对书本上内容的理解,参照书上的讲解尝试写了一些demo,用于以后工作中查阅,如果涉及侵权请告知,实例程序samp2_3 mydialog.h #ifnd ...
- mybatis今年笔记
1.读取配置文件:用的就是解析Xml文件的技术 2.mybatis是支持自己写dao层的,但是没有必要. mybatis做的事情: 第一个创建代理对象,第二个在代理对象中调用方法. 3.相同的注解如果 ...