我在Flask中有一部分API当前在Json中返回一个Numpy数组,我需要提供以CSV而不是Json的形式返回的选项。
我成功完成此操作的唯一方法是使用numpy.savetxt将Numpy数组保存为CSV然后提供该文件。我发现我不能像How can I generate file on the fly and delete it after download?这样留下文件,但仍感觉'kludgy'
有没有办法将Numpy数组作为CSV返回而不通过文件?
答案 0 :(得分:2)
是的,你可以,
@app.route('/download')
def download():
csv = convert_numpy_array_to_csv(your_numpy_array)
response = make_response(csv)
response.headers["Content-Disposition"] = "attachment; filename=array.csv"
return response
您不必将csv保存到文件中。如果您无法避免创建文件,可以在临时文件夹中创建文件(可以通过import tempfile;tempfile.gettempdir()
获取)。这样做会在每次重启系统时自动删除文件
答案 1 :(得分:1)
好吧,如果你想使用numpy.savetxt函数,那么你可以使用cStringIO:
from cStringIO import StringIO
output = StringIO()
numpy.savetxt(output, numpy_array)
csv_string = output.getvalue()
对于python 3,您可以从io模块导入StringIO或BytesIO。