109:大型CSV文件的处理方式

生成大的CSV文件:

  108是生成的一个小的csv文件,如果想要生成大型的csv文件,那么以上方式将有可能会发生超时的情况(服务器要生成一个大型csv文件,需要的时间可能会超过浏览器默认的超时时间)。这时候我们可以借助另外一个类,叫做StreamingHttpResponse对象,这个对象是将响应的数据作为一个流返回给客户端,而不是作为一个整体返回。示例代码如下:from django.http import HttpResponse, JsonResponse, StreamingHttpResponse

from django.template import loader, context
import json, csv

# Create your views here.

def large_csv(request):
    resp = StreamingHttpResponse(content_type=‘text/csv‘)
    resp[‘Content-Disposition‘] = "attachment;filename=‘large.csv‘"
    rows = ("Row {}, {}\n".format(row, row) for row in range(1,100000))
    resp.streaming_content = rows

    # 对比上下两种方法
    # resp = HttpResponse(content_type=‘text/csv‘)
    # resp[‘Content-Disposition‘] = "attachment;filename=‘largs.csv‘"
    # mywrite = csv.writer(resp)
    # for i in range(1,1000000):
    #     mywrite.writerow([i, i*2])
    return resp

  这里我们构建了一个非常大的数据集rows,并且将其变成一个迭代器。然后因为StreamingHttpResponse的第一个参数只能是一个生成器,因此我们使用圆括号(writer.writerow(row) for row in rows),并且因为我们要写的文件是csv格式的文件,因此需要调用writer.writerowrow变成一个csv格式的字符串。而调用writer.writerow又需要一个中间的容器,因此这里我们定义了一个非常简单的类Echo,这个类只实现一个write方法,以后在执行csv.writer(pseudo_buffer)的时候,就会调用Echo.writer方法。

注意:StreamingHttpResponse会启动一个进程来和客户端保持长连接,所以会很消耗资源。所以如果不是特殊要求,尽量少用这种方法。

关于StreamingHttpResponse:

这个类是专门用来处理流数据的。使得在处理一些大型文件的时候,不会因为服务器处理时间过长而到时连接超时。这个类不是继承自HttpResponse,并且跟HttpResponse对比有以下几点区别:

  • 这个类没有属性content,相反是streaming_content
  • 这个类的streaming_content必须是一个可以迭代的对象。
  • 这个类没有write方法,如果给这个类的对象写入数据将会报错。

注意:StreamingHttpResponse会启动一个进程来和客户端保持长连接,所以会很消耗资源。所以如果不是特殊要求,尽量少用这种方法。

# 对比上下两种方法# resp = HttpResponse(content_type=‘text/csv‘)# resp[‘Content-Disposition‘] = "attachment;filename=‘largs.csv‘"# mywrite = csv.writer(resp)# for i in range(1,1000000):#     mywrite.writerow([i, i*2])

原文地址:https://www.cnblogs.com/zheng-weimin/p/10415956.html

时间: 2024-10-09 00:44:12

109:大型CSV文件的处理方式的相关文章

109.大型的csv文件的处理方式

HttpResponse对象将会将响应的数据作为一个整体返回,此时如果数据量非常大的话,长时间浏览器没有得到服务器的响应,就会超过默认的超时时间,返回超时.而StreamingHttpResponse会将响应的数据作为一个数据流返回给浏览器,这样浏览器就可以接收到服务器发送过来的数据,不会因为长期没有得到服务器的回应而返回超时. StreamingHttpResponse: 这个类是专门用来处理流数据的,使得在处理一些大型文件的时候,不会因为服务器处理时间过长而连接超时.这个类并不是继承Http

使用pandas处理大型CSV文件

# -*- coding:utf-8 -*- ''' CSV 常用API 1)reader(csvfile[, dialect='excel'][, fmtparam]),主要用于CSV 文件的读取,返回一个 reader 对象用于在CSV 文件内容上进行行迭代. 参数: csvfile,需要是支持迭代(Iterator)的对象,通常对文件(file)对象或者列表(list)对象都是适用的,并且每次调用next() 方法的返回值是字符串(string): dialect 的默认值为excel,与

Python拆分大型CSV文件(亲测拆分178G)注释超全

程序 1 #!/usr/bin/env python3 2 # -*- coding:utf-8 -*- 4 # @FileName :Test.py 5 # @Software PyCharm 6 7 import os 8 import pandas as pd 9 10 # filename为文件路径,file_num为拆分后的文件行数 11 # 根据是否有表头执行不同程序,默认有表头的 12 def Data_split(filename,file_num,header=True): 1

django生成CSV文件

生成CSV和Excel文件:有时候我们做的网站,需要将一些数据导出到文件中以方便统计,在导出文件类型中生成CSV文件或者是Excel文件是常用的方式,导出的CSV文件或者Excel文件将以附件的方式下载下来,以下将讲解如何生成CSV文件. 生成小的CSV文件:我们用Python内置的csv模块来处理csv文件,并且使用HttpResponse来将csv文件返回回去,首先来介绍一下把数据写入到CSV文件的一种方法: import csv with open('abc.csv') as fp: wr

es实战之数据导出成csv文件

从es将数据导出分两步: 查询大量数据 将数据生成文件并下载 本篇主要是将第二步,第一步在<es实战之查询大量数据>中已讲述. csv vs excel excel2003不能超过65536, excel2007及以上版本支持1048576条数据.excel支持的数据量有限,并且生生成文件的速度比较慢. csv具有支持写入量大,文件较小的优点. 故选择csv作为导出文件类型. 导出文件的几种方式: 将数据从es中查询出来,在这个大前提下,对比导出文件的速度. 由前端处理 直接将数据返回给前端,

Pandas 基础(4) - 读/写 Excel 和 CSV 文件

这一节将分别介绍读/写 Excel 和 CSV 文件的各种方式: - 读入 CSV 文件 首先是准备一个 csv 文件, 这里我用的是 stock_data.csv, 文件我已上传, 大家可以直接下载下来使用. 正如前面讲过的, csv 文件可以放在 jupyter notebook 同目录下, 这样直接写文件名就可以了, 但是如果没有放在同目录下, 就需要写绝对路径, 否则读取不到. import pandas as pd df = pd.read_csv('/Users/rachel/Sit

POI以SAX方式解析Excel2007大文件(包含空单元格的处理) Java生成CSV文件实例详解

http://blog.csdn.net/l081307114/article/details/46009015 http://www.cnblogs.com/dreammyle/p/5458280.html . Office2007与Office Open XML 在Office 2007之前,Office一直都是以二进制位的方式存储,但这种格式不易被其它软件拿来使用,在各界的压力下,MicroSoft于2005年发布了基于XML的ooxml开放文档标准.ooxml的xml schema强调减

PLSQL_PLSQL读写CSV文件方式(案例)

2012-01-06 Created By BaoXinjin 一.摘要 读写CSV的方式 1. 写CSV Step1. 创建测试目录 Step2. 写CSV文件 Step3. 查看CSV文件 2. 读CSV Step1. 创建测试表 Step2. 读CSV文件 Step3. 查看表 二.写CSV文件 Step1. 创建测试目录 --创建测试目录 CREATE OR REPLACE DIRECTORY bxjcsv AS '/home/oracle/bxjcsv'; --目录权限分配 GRANT

CSV文件在Python中的几种处理方式

Comma Separated Values,简称CSV,它是一种以逗号分隔数值的文件类型.在数据库或电子表格中,它是最常见的导入导出格式,它以一种简单而明了的方式存储和共享数据,CSV文件通常以纯文本的方式存储数据表.今天,我将给大家分享在Python中如何操作CSV文件. 一.数据源 首先,我们来看看本次操作的数据源,图1 CSV文件是在Excel中打开的,图2 CSV文件是在Notepad++中打开的,我们在图2中可以看到数值之间是以逗号分隔开的,每行末尾是CR回车符和LF换行符(请注意,