Python Flask 后端动态生成 csv 文件并返回

该博客展示了如何利用Flask框架创建一个API接口,该接口能够以CSV格式流式传输数据。通过内存中的StringIO对象和csv模块,实现了在不生成实际文件的情况下,将数据逐行写入并返回给客户端进行下载。这个例子中,数据是一个包含姓名和电子邮件的列表,并设置了Content-Disposition头来触发浏览器的下载行为。
摘要由CSDN通过智能技术生成
from flask import Flask
from flask import Response
from flask import stream_with_context
from io import StringIO
import csv

#	测试数据
data = [
		['Jack','jack@abc.com'],
		['Ben','ben@abc.com'],
		['jerry','jerry@abc.com']
	]


@app.route('/api/exportEmails', methods=['GET'])
def exportEmails():
	#	定义一个生成器 (generate),逐行生成,实现流式传输
    def generate():
    	#	用 StringIO 在内存中写,不会生成实际文件
        io = StringIO()	#在 io 中写 csv
        w = csv.writer(io)
        for i in data:      #对于 data 中的每一条
            w.writerow(i)   #传入的是一个数组 ['xxx','xxx@xxx.xxx'] csv.writer 会把它处理成逗号分隔的一行
            				#需要注意的是传入仅一个字符串 '' 时,会被逐字符分割,所以要写成 ['xxx'] 的形式
            yield io.getvalue()		#返回写入的值
            io.seek(0)		#io流的指针回到起点
            io.truncate(0)	#删去指针之后的部分,即清空所有写入的内容,准备下一行的写入
    #	用 generate() 构造返回值
    response = Response(stream_with_context(generate()), mimetype='text/csv')
    #	设置Headers: Content-Disposition: attachment 表示默认会直接下载。 指定 filename。
    response.headers.set("Content-Disposition","attachment",filename="emails.csv")
    #	将 response 返回
    return response
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值