You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取IPython Notebook的当前文件名?

获取Jupyter Notebook文件名的可行方案

你提到的__file__属性在Notebook环境中不存在,因为Notebook是通过内核运行的,没有对应的脚本文件路径。以下是几种无需依赖ipyparams或ipynbname的解决方法:

方法1:通过JavaScript传递文件名(经典Jupyter Notebook适用)

利用Notebook前端的JavaScript API获取文件名,再传递给Python变量:

import os
from IPython.core.display import Javascript

def get_notebook_name():
    js_script = """
    var kernel = IPython.notebook.kernel;
    var command = "notebook_name = '" + IPython.notebook.notebook_name + "'";
    kernel.execute(command);
    """
    display(Javascript(js_script))

# 获取文件名
get_notebook_name()
# 提取前缀
prefix = os.path.splitext(os.path.basename(notebook_name))[0]

方法2:适配Jupyter Lab的版本

如果使用Jupyter Lab,调整JavaScript代码即可:

import os
from IPython.core.display import Javascript

def get_notebook_name_lab():
    js_script = """
    var notebook_title = document.querySelector('.jp-NotebookPanel-title').textContent;
    var kernel = Jupyter.notebook.kernel;
    var command = "notebook_name = '" + notebook_title + "'";
    kernel.execute(command);
    """
    display(Javascript(js_script))

get_notebook_name_lab()
prefix = os.path.splitext(os.path.basename(notebook_name))[0]

方法3:兼容脚本与Notebook的通用写法

如果需要同时支持Python脚本和Notebook环境,可以加入异常捕获和手动 fallback:

import os
from IPython.core.display import Javascript

def get_notebook_name():
    try:
        js_script = """
        var kernel = IPython.notebook.kernel;
        var command = "notebook_name = '" + IPython.notebook.notebook_name + "'";
        kernel.execute(command);
        """
        display(Javascript(js_script))
        return True
    except:
        return False

# 尝试获取前缀
try:
    # 脚本环境优先
    prefix = os.path.splitext(os.path.basename(__file__))[0]
except AttributeError:
    # Notebook环境尝试自动获取
    if get_notebook_name():
        prefix = os.path.splitext(os.path.basename(notebook_name))[0]
    else:
        # 自动失败时手动指定
        prefix = "default_prefix"

内容的提问来源于stack exchange,提问作者Uri Cohen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 13:31:11