我使用了建议的代码从 iPython Notebook 下载 CSV动态构建 JavaScript 代码,并在从 Jupyter Notebook 调用时使用 Python 中的 Javascript() 将其传递到浏览器。代码效果很好。如果我将相同的代码嵌入到 python 函数中并从同一个 jupyter 笔记本调用 python 函数,则 python 中的调用 Javascript() 不再有效。如何使可重用功能发挥作用?
我正在 Windows 10 上运行的 Chrome 版本 73.0.3683.103(官方版本)(64 位)上尝试此操作。如果已得到答复,我们深表歉意。我已经搜索过SO和谷歌。
这有效..
from IPython.display import Javascript
js_download = """
var csv = '%s';
var filename = 'results.csv';
var blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });
if (navigator.msSaveBlob) { // IE 10+
navigator.msSaveBlob(blob, filename);
} else {
var link = document.createElement("a");
if (link.download !== undefined) { // feature detection
// Browsers that support HTML5 download attribute
var url = URL.createObjectURL(blob);
link.setAttribute("href", url);
link.setAttribute("download", filename);
link.style.visibility = 'hidden';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}
""" % data_in_dataframes.to_csv(index=False).replace('\r','\\r').replace('\n','\\n').replace("'","\'")
Javascript(js_download)
这不起作用,它无法执行 Javascript(js_download),但它也没有给出我在 jupyter 笔记本或浏览器中的 java 控制台中看到的任何错误。就好像它从未执行过 Javascript(js_download)。
from IPython.display import Javascript
def js_download_csv(df_download, s_filename='results.csv'):
js_download = """
var csv = '%s';
var filename = '%s';
var blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });
if (navigator.msSaveBlob) { // IE 10+
navigator.msSaveBlob(blob, filename);
} else {
var link = document.createElement("a");
if (link.download !== undefined) { // feature detection
// Browsers that support HTML5 download attribute
var url = URL.createObjectURL(blob);
link.setAttribute("href", url);
link.setAttribute("download", filename);
link.style.visibility = 'hidden';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}
""" % (df_download.to_csv(index=False).replace('\r','\\r').replace('\n','\\n').replace("'","\'"), s_filename)
Javascript(js_download)
return None
js_download_csv(df_download, s_filename)
如果我遗漏了任何明显的内容,我深表歉意。我找不到任何错误或日志,其中包含有关所发生情况的任何信息。
欢迎任何建议。