Javascript 烧瓶-D3读取的温度CSV为空
我目前在创建一个临时CSV文件时遇到问题,该文件应该由D3.js读取。出于某种原因,它总是被视为空的 如果我将数据帧Javascript 烧瓶-D3读取的温度CSV为空,javascript,csv,d3.js,flask,python-3.7,Javascript,Csv,D3.js,Flask,Python 3.7,我目前在创建一个临时CSV文件时遇到问题,该文件应该由D3.js读取。出于某种原因,它总是被视为空的 如果我将数据帧df的内容复制并粘贴到例如test.csv中,并使用d3.csv(“test.csv”),…则它运行时没有任何问题,console.log(data)返回大小为31的数组。但是,使用Flask URL,我得到一个空数组[]作为console.log的输出(数据) 奇怪的是,print(“start”,file=sys.stderr)和print(buffer,file=sys.st
df
的内容复制并粘贴到例如test.csv
中,并使用d3.csv(“test.csv”),…
则它运行时没有任何问题,console.log(data)
返回大小为31的数组。但是,使用Flask URL,我得到一个空数组[]
作为console.log的输出(数据)
奇怪的是,print(“start”,file=sys.stderr)
和print(buffer,file=sys.stderr)
从未执行过(至少它没有显示在控制台上),这让我相信,即使调用了Flask URL/query/csv/
,整个获取d3数据(doc id)
函数也从未运行过
在Flask调试日志回溯中,GET/query/8 HTTP/1.1“200-
这是包含D3.js代码的URL,是最后一个被调用的,并且从不调用GET/query/csv/8
编辑:我刚刚在浏览器网络选项卡中发现/query/csv/{{doc\u id}
正在被调用,但由于某种原因没有出现在我的Flask调试日志中。此外,如前所述,我放在函数中的打印文件似乎从未执行过,这使我相信D3.js代码调用了正确的Flask URL,但函数从未执行过
此外,console.log(d3.csv('/query/csv/{doc_id}}');
返回{header:ƒ、mimeType:ƒ、responseType:ƒ、response:ƒ、get:ƒ、}
其中大多数变量,如header参数
和行参数
都是null
烧瓶代码
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')
...
d3.csv("/query/csv/{{doc_id}}", function(error, data) {
if (error) throw error;
console.log(data);
...
浏览器网络选项卡
您可能需要在发送文件
中指定为\u attachment=true
:
return send_file(buffer, mimetype='text/csv', as_attachment=True)
设置内容配置
,告知浏览器下载文件
resp = flask.make_response(df.to_csv())
resp.headers["Content-Disposition"] = "attachment; filename=export.csv"
resp.headers["Content-Type"] = "text/csv"
return resp
不幸的是,将作为附件添加给我GEThttp://127.0.0.1:5000/query/csv/8 500(内部服务器错误)
和未捕获的XMLHttpRequest
被if(错误)捕获抛出错误;
Oops我忘了添加错误的Python端,它是TypeError:filename不可用,作为附件发送是必需的。
。不幸的是,这是相同的问题。它看起来像d3.csv(“/query/csv/{doc\u id}…”。。。“
从不激活Flask函数,这似乎不是Flask函数本身的问题。从浏览器的“网络”选项卡上,可以看出,/query/csv/{{doc\u id}}
正在被调用,但函数似乎没有执行(或者Flask无法识别被调用的Flask URL)。只想更新。我强制执行了代码,但得到了GEThttp://127.0.0.1:5000/query/csv/8 500(内部服务器错误)
和XMLHttpRequest{onreadystatechange:null,readyState:4,超时:0,带凭据:false,upload:XMLHttpRequestUpload,…}
两者都被if(错误)捕获抛出错误;
。此外,使用console.log(d3.csv('/query/csv/{{doc_id}'));
我得到了与使用缓冲区代码时相同的空输出(我用附加信息编辑了我的原始帖子),但出现了上述错误。