【问题标题】:Jupyter Notebooks: How do I execute only cells that have a particular tagJupyter Notebooks:如何仅执行具有特定标签的单元格
【发布时间】:2018-06-19 05:41:07
【问题描述】:

我正在创建一个小部件,它只执行笔记本中的某些单元格——根据更改的数据生成新的绘图。而 Jupyter 可以执行诸如执行 notebook 中的所有单元格,或者执行当前单元格下方的所有单元格等操作。

相反,我想为要选择性执行的单元格创建标签。然后,当我按下按钮时,我可以执行此代码并运行单元格。

小部件代码本身并不重要——这部分很简单。更难的是弄清楚如何在 notebook 中实现 python 和 javascript 之间的通信。有人有想法么。

【问题讨论】:

    标签: javascript python widget jupyter-notebook


    【解决方案1】:

    所以我想通了。我认为其他人一直在寻找类似的答案,所以我将其发布。

    首先,我必须在笔记本中标记相关单元格。您可以通过笔记本中的“视图”和“单元格工具栏”来执行此操作。

    其次,用这些函数创建一个代码单元。第一个函数将得到 所有具有特定标签的单元格。第二个单元将运行所有具有 那个标签。在我的例子中,标记名是“plotcell”,但这可以更改为任何内容。这个单元格在尝试使用这个函数之前需要运行,所以我通常把它作为一个初始化单元格。

    %%javascript
    window.findCellIndicesByTag = function findCellIndicesByTag(tagName) {
      return (Jupyter.notebook.get_cells()
        .filter(
          ({metadata: {tags}}) => tags && tags.includes(tagName)
        )
        .map((cell) => Jupyter.notebook.find_cell_index(cell))
      );
    };
    
    window.runPlotCells = function runPlotCells() {
        var c = window.findCellIndicesByTag('plotcell');
        Jupyter.notebook.execute_cells(c);
    };
    

    最后,要运行这段代码,你需要使用下面的代码:

    from IPython.core.display import Javascript
    from IPython.display import display
    
    def runPlotCells():
        display(Javascript("window.runPlotCells()"))
    

    此代码将执行之前创建的 Javascript 函数来运行 PlotCells。我使用了display 函数,因此笔记本中的输出被抑制,结果在浏览器开发者控制台中可见。

    然后在按钮的 on_click 事件之后运行此函数。

    应该就是这样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-07
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 2019-04-09
      • 1970-01-01
      相关资源
      最近更新 更多