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

时间:2015-03-23 03:38:21

标签: ipython-notebook

听起来很简单,如何将保存路径(.ipynb文件的位置)形成一个带有笔记本的单元格。

3 个答案:

答案 0 :(得分:2)

使用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前缀的结果,以及当你已经更改笔记本中的当前目录时如何处理这种情况

答案 1 :(得分:1)

结果可以使用一些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) 

答案 2 :(得分:0)

其他答案未获得正确的完整路径。他们可以相对于内核的笔记本工作目录或Jupyter主目录获取它。

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

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

%%javascript
// Fetch and decode the notebook filename
var notebookFilename = decodeURIComponent(
    window.document.body.dataset.notebookName
);
// Drop the filename into a Python variable
Jupyter.notebook.kernel.execute(
    `notebook_filename = "${notebookFilename}"`
);

然后在第二个单元格中,将该文件名转换为绝对路径:

import os
notebook_path = os.path.abspath(notebook_filename)
notebook_path

notebook_path现在将成为笔记本的完整绝对路径。

在Ubuntu 77上使用jupyter-notebook 5.7.8测试了