【问题标题】:Returning a Numpy Array as a CSV from Flask从 Flask 将 Numpy 数组作为 CSV 返回
【发布时间】:2014-08-18 06:57:31
【问题描述】:

我在 Flask 中有一部分 API,目前在 Json 中返回一个 Numpy 数组,我需要提供以 CSV 而不是 Json 的形式返回的选项。

我成功完成此操作的唯一方法是使用 numpy.savetxt 将 Numpy 数组保存为 CSV,然后提供该文件。我发现我不能像这样How can I generate file on the fly and delete it after download? 留下文件,但是仍然感觉“笨拙”

有没有办法在不通过文件的情况下将 Numpy 数组作为 CSV 返回?

【问题讨论】:

  • numpy 数组中的数据类型是什么,它是 ndarray 还是 1darray?
  • 类型 - 通常是 np.float16。它们是 ndarrays。

标签: python numpy flask export-to-csv


【解决方案1】:

是的,你可以,

@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() 获得)。这样做会在每次重新启动系统时自动删除文件

【讨论】:

  • 感谢您的回答 - 但是我从 Numpy 到 csv (numpy.writetxt) 的方式只导出到文件。
  • 谢谢 - 我正在使用 tempfile,但不想让文件在重新启动之间徘徊。
【解决方案2】:

好吧,如果你想使用 numpy.savetxt 函数,那么你可以使用 cStringIO:

from cStringIO import StringIO
output = StringIO()
numpy.savetxt(output, numpy_array)
csv_string = output.getvalue()

对于 python 3,您可以从 io 模块导入 StringIO 或 BytesIO。

【讨论】:

  • 这看起来完全符合我的需要。将尝试并报告。
  • 这使我可以使用 savetxt 创建 CSV 并根据需要提供服务,而无需通过 CSV。谢谢!
猜你喜欢
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多