首页 > 编程知识 正文

csv文件无法保存(csv格式文件怎么打开)

时间:2023-05-05 11:11:06 阅读:93837 作者:3988

我们制作的网站可能需要在浏览器中生成一些数据CSV文件作为附件下载。 让我们来看看CSV文件的生成方法。

下载小的CSV文件

首先让我们来看看如何下载小CSV文件。 使用内置于Python中的csv模块处理csv文件,并使用HttpResponse返回csv文件。 示例代码如下:

导入中央电视台

来自日本. httpimporthttpresponse

ef CSV _ view (请求) :

响应=httpresponse (内容_类型='文本/CSV ' )

响应[ '内容分布' ]='附件; 文件名=' some文件名. CSV ' '

writer=CSV.writer (响应) )

writer.write row (“名称”,“年龄”,“序列”

writer.writerow([ '张三',' 28 ','女' ]

初始化returnresponsehttpresponse时,将内容类型指定为text/csv。 这样,浏览器就会将其视为csv格式的文件,而不是HTML格式的文件。 因为默认值为HTML。 在响应中添加内容发布标头。 它教浏览器如何处理这个文件。 将此标题的值设置为附件; 则浏览器不显示此文件,而是将其作为附件下载。 第二个文件名=' some filename.csv '是用于指定该CSV文件的名称。 使用csv模块的writer方法,将适当的数据写入响应。 也可以将

将csv文件定义成模板

csv格式的文件定义为模板,然后使用Django内置的模板系统将Context对象传递给该模板。 这样,模板系统就会基于传递的Context对象生成具体的CSV文件。 示例代码如下:

模板文件:

forrowindata %,row.0,row.1,row.2,

{% endfor %}视图函数:

来自日本. httpimporthttpresponse

来自日本.模板端口加载器,上下文

EF some _ view (请求) :

响应=httpresponse (内容_类型='文本/CSV ' )

响应[ '内容分布' ]='附件; 文件名=' some文件名. CSV ' '

csv_data=(

(“第一行”、“福”、“八”、“八”),

(“第二行”、“a”、“b”、“c”、“测试”、“其他”和“问题”),

t=loader.get _ template (我的模板名称. txt ) )。

response.content=t.render (“数据”: CSV _数据)

return response

如何下载超大的CSV文件

以上的示例是生成的小csv文件,如果尝试生成大的csv文件,则可能会按以上方法发生超时。 服务器生成大型csv文件可能需要较长的时间,超过浏览器的默认超时时间。 此时,可以使用另一个称为流httpresponse对象的类。 这个对象不是将响应的数据作为整体返回,而是作为流返回给客户端。 示例代码如下:

第:类

''''

定义可以执行写入的类,然后在调用csv.writer时执行

''''

ef write (自写,值) :

返回值

ef large _ CSV (请求) :

rows=[ ' row ' .格式(idx ),str ) idx联邦范围655360

仿真_缓冲器=ECHO (

writer=CSV.writer (伪缓冲器) ) ) ) ) ) ) ) ) ) ) ) )。

响应=流httpresponse ((writer.write row ) for row in rows ),内容类型='文本/CSV ' )

响应[ '内容分布' ]='附件; 文件名=' some文件名. CSV ' '

return response在这里,我们构建了一个非常大的数据集rows,并将其作为迭代者。 接下来,由于流httpresponse的第一个参数只能是生成器,因此我们将使用括号(writer.writerow(row ) for row in rows )。 另外,由于要写入的文件是csv格式的文件,因此需要调用writer.writerow。调用writer.writerow需要中间的容器,因此在此定义非常简单的类Echo。 此类只实现一个write方法,稍后运行CSV.writer(pseudo_buffer )时将调用Echo.writer方法。

关于StreamingHttpResponse:

类专门用于处理流式数据。 在处理几个大文件时,防止服务处理时间过长而导致连接超时。 此类不是从HttpResponse继承的,与HttpResponse相比有以下不同:

此类没有属性content,相反是streaming_content。 此类的streaming_content必须是可重复的对象。 这个类没有write方法。 将数据写入此类的对象时,将报告错误。 注意:由于流httpresponse将启动与客户机保持长连接的过程,因此会消耗资源。 所以如果不是特别的要求,尽量不用这个方法。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。