我目前在创建应由 D3.js 读取的临时 CSV 文件时遇到问题。由于某种原因,它总是被视为空的。
如果我复制并粘贴 dataframe df
的内容进入例如test.csv
并使用 d3.csv("test.csv", ...
然后它运行没有任何问题并且console.log(data)
返回一个大小为 31 的数组。但是,使用 Flask URL,我得到一个空数组 []
作为 console.log(data)
的输出.
奇怪的是print("starting", file=sys.stderr)
和 print(buffer, file=sys.stderr)
从不执行(至少它没有显示在控制台上)这让我相信整个 get_d3_data(doc_id)
即使 Flask URL /query/csv/<doc_id>
函数也永远不会运行被称为。
在 Flask 调试日志回溯中,GET /query/8 HTTP/1.1" 200 -
这是包含 D3.js 代码的 URL 是最后一个被调用的并且 GET /query/csv/8
永远不会被调用。
编辑: 我刚刚在浏览器网络选项卡中发现 /query/csv/{{doc_id}}
正在被调用但由于某种原因没有出现在我的 Flask 调试日志中。另外,如前所述,prints
我放入函数似乎永远不会执行,这让我相信 D3.js 代码调用了正确的 Flask URL,但函数永远不会执行。
此外,console.log(d3.csv('/query/csv/{{doc_id}}'));
返回 {header: ƒ, mimeType: ƒ, responseType: ƒ, response: ƒ, get: ƒ, …}
其中大多数变量,如 header arguments
和 row arguments
是 null
.
flask 代码
from flask import Flask, json, render_template, send_file
import gensim
import gensim.models as g
import smart_open
import pandas as pd
from io import StringIO
...
@app.route('/query/csv/<doc_id>')
def get_d3_data(doc_id):
print("starting", file=sys.stderr)
...
#code to make dataframe df
...
buffer = StringIO()
df.to_csv(buffer, encoding='utf-8')
buffer.seek(0)
print(buffer, file=sys.stderr)
return send_file(buffer, mimetype='text/csv')
HTML 代码
...
d3.csv("/query/csv/{{doc_id}}", function(error, data) {
if (error) throw error;
console.log(data);
...
最佳答案
您可能需要在 send_file
中指定 as_attachment=true
:
return send_file(buffer, mimetype='text/csv', as_attachment=True)
关于javascript - Flask - D3 空读取临时 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56027953/