Jupyter notebook 如何找到当前Ipython笔记本的路径?

Jupyter notebook 如何找到当前Ipython笔记本的路径?,jupyter-notebook,Jupyter Notebook,听起来很简单,如何从笔记本中的单元格中获取保存路径(.ipynb文件的位置)?事实证明,可以使用一些javascript魔术从笔记本页面HTML正文中的某些属性获取笔记本路径: %%javascript var kernel = IPython.notebook.kernel; var proj = window.document.body.getAttribute('data-project'); var path = window.document.body.getAttribute(

听起来很简单,如何从笔记本中的单元格中获取保存路径(.ipynb文件的位置)?

事实证明,可以使用一些javascript魔术从笔记本页面HTML正文中的某些属性获取笔记本路径:

%%javascript 
var kernel = IPython.notebook.kernel; 
var proj = window.document.body.getAttribute('data-project'); 
var path = window.document.body.getAttribute('data-notebook-path'); 
var command = "proj = " + "'"+proj+"'";
kernel.execute(command);
var command = "path = " + "'"+path+"'" kernel.execute(command)
在单元格中执行上述操作后,可以通过执行

import os 
os.path.join( proj, path) 

使用Jupyter,您可以通过以下URL获取笔记本的相对路径:

%%javascript 
var kernel = Jupyter.notebook.kernel; 
var command = ["notebookPath = ",
               "'", window.document.body.dataset.notebookPath, "'" ].join('')
//alert(command)
kernel.execute(command)
var command = ["notebookName = ",
               "'", window.document.body.dataset.notebookName, "'" ].join('')
//alert(command)
kernel.execute(command)
然后可以检查python变量notebookName和notebookPath


我不确定url前缀的情况下的结果,以及当您已经更改笔记本中的当前目录时如何处理该情况

其他答案没有获得正确的完整路径。它们要么相对于内核的notebook工作目录,要么相对于Jupyter主目录

以下是获取完整笔记本路径的方法:

首先,使用JavaScript单元格获取笔记本文件名,URL解码并将其放入Python变量中:

%%javascript
//获取并解码笔记本文件名
var notebookFilename=decodeURIComponent(
window.document.body.dataset.notebookName
);
//将文件名放入Python变量中
Jupyter.notebook.kernel.execute(
`notebook_filename=“${notebookFilename}”`
);
然后在第二个单元格中,将该文件名转换为绝对路径:

导入操作系统
notebook\u path=os.path.abspath(notebook\u文件名)
笔记本电脑路径
notebook\u路径
现在将是笔记本的完整绝对路径


使用jupyter notebook 5.7.8在Ubuntu上的Chrome 77上进行测试,这在IPython 3.2.0、Python 3.4中不起作用:
Javascript添加输出时出错
语法错误:意外标识符
有关详细信息,请参阅浏览器Javascript控制台。
我通过使用Jupyter替换IPython部分解决了该问题,但解决方案仍然不完整,请参阅下面的回答。结果不包含笔记本文件的完整路径(当我从笔记本所在的目录执行时)可以添加
notebook\u full\u path=os.path.abspath(notebookName)