Jupyter/Lab:Notebook远程文件浏览及路径获取方案咨询
刚好我之前也折腾过类似的需求,来给你分享两个实用的解决方案:
一、维护中且带文档的开源Jupyter交互文件选择组件
这些组件能帮你在Notebook里直接浏览(远程)文件系统并选择数据集,不用手动改路径字符串:
ipyfilechooser
这是我最常用的选项,基于ipywidgets开发,在经典Notebook和JupyterLab里都能跑,维护状态很稳定,文档也写得很清楚。它支持本地文件浏览、自定义文件过滤、设置初始目录,要是你把远程文件系统(比如SFTP、S3)挂载成了本地目录,也能直接用。快速上手代码:
from ipyfilechooser import FileChooser # 初始化选择器,默认打开当前Notebook所在的目录 fc = FileChooser('.') # 可以加过滤规则,比如只显示CSV和JSON文件 fc.filter_pattern = ['*.csv', '*.json'] # 显示交互组件 display(fc) # 用户选完文件后,直接取路径就行 if fc.selected: print(f"选中的数据集路径:{fc.selected_path}")jupyterlab-filechooser(JupyterLab专属)
如果你只在JupyterLab环境下用,这个扩展更贴合JupyterLab的原生风格,还能直接支持JupyterLab集成的远程存储(比如S3、Google Drive)。安装后通过widget调用就行,文档也比较完善。安装命令:
pip install jupyterlab-filechooser jupyter lab build
二、在JupyterLab文件浏览器中获取选中文件的相对路径
这个需求需要结合前端和Python内核的交互,给你一个简单的实现方法,不用装额外扩展:
在Notebook的单元格里运行这段JavaScript代码,它会自动获取选中文件的路径,计算相对当前Notebook的路径,然后传给Python变量:
// 获取文件浏览器中选中的第一个文件 const selectedItem = document.querySelector('.jp-DirListing-item.jp-mod-selected'); if (selectedItem) { const selectedPath = selectedItem.dataset.path; // 获取当前Notebook的完整路径 const notebookPath = Jupyter.notebook.notebook_path; // 计算相对路径(JupyterLab内置了Node.js的path模块) const relativePath = require('path').relative( require('path').dirname(notebookPath), selectedPath ); // 把结果传给Python内核的变量 IPython.notebook.kernel.execute(`selected_relative_path = "${relativePath}"`); console.log(`相对路径已传入Python:selected_relative_path = ${relativePath}`); } else { console.log("请先在文件浏览器里选中一个文件哦"); }然后在Python单元格里直接用这个变量就行:
print(f"选中文件相对当前Notebook的路径:{selected_relative_path}")
注意:这个方法依赖JupyterLab的DOM结构,如果以后JupyterLab更新了界面类名,可能需要调整选择器。要是你需要更稳定的方案,可以考虑写个简单的JupyterLab扩展用官方API,但日常用上面的方法足够方便了。
内容的提问来源于stack exchange,提问作者AstrOne
相关产品推荐
相关产品推荐

