在使用 Flask 的 python 中,如何写出一个对象以供下载?
Posted
技术标签:
【中文标题】在使用 Flask 的 python 中,如何写出一个对象以供下载?【英文标题】:In python using Flask, how can I write out an object for download? 【发布时间】:2012-08-23 09:59:15 【问题描述】:我正在使用 Flask 和运行工头。我在内存中构建的数据,我希望用户能够将这些数据下载到文本文件中。我不想将数据写入本地磁盘上的文件并使其可供下载。
我是 python 新手。我想我会在内存中创建一些文件对象,然后设置响应头,也许?
【问题讨论】:
【参考方案1】:Flask 文档的“模式”部分介绍了将文件流式传输到客户端而不将它们保存到磁盘 - 具体而言,in the section on streaming。基本上,您所做的是返回一个完整的 Response
对象来包装您的迭代器:
from flask import Response
# construct your app
@app.route("/get-file")
def get_file():
results = generate_file_data()
generator = (cell for row in results
for cell in row)
return Response(generator,
mimetype="text/plain",
headers="Content-Disposition":
"attachment;filename=test.txt")
【讨论】:
我不知道结果中的行的哪个单元格...正在做什么,你能解释一下吗? @swidnikk - 这是一个生成器表达式 - 它类似于列表推导表达式[x for x in range(10)]
,除了它生成的是生成器对象而不是列表。 (x for x in range(10))
不会一次生成整个列表。相反,每次调用__next__
(Python 2.X 中的next
)时,它都会懒惰地评估x
的下一个值。文档向您展示了使用 yield
(def generator_func(): for x in range(10): yield x
) 创建生成器的不同方法。嵌套的 for
表达式在那里,因为我假设了列表类型的数据结构。这有意义吗?
谢谢。我不知道如何查找更多信息。我现在明白了,并在此处的文档中找到了它:docs.python.org/tutorial/classes.html#generators 我想如果我正在创建的文件变得太大而无法保存在内存中,这将特别有用。以上是关于在使用 Flask 的 python 中,如何写出一个对象以供下载?的主要内容,如果未能解决你的问题,请参考以下文章