天道酬勤,学无止境

IPython Notebook 以前的单元格内容(IPython Notebook previous cell content)

问题

是否可以在 IPython-Notebook 单元格中获取先前(上方)单元格内容?

我可以使用 %capture 魔术函数查看先前的输出,但我找不到如何获取先前的单元格内容。

回答1
%recall jupyter_notebook_cell_number

应该给你最后在指定的特定笔记本单元格中执行的代码,jupyter_notebook_cell_number

回答2

我没有找到如何在单元格中获取上一个内容单元格。

但我找到了另一个解决方案,创建一个自定义的魔法笔记本功能来捕获单元格内容并使用它。

回答3

输入捕获系统的文档相当丰富。 返回的输出(不是单元格输出内容)存储在_oh字典中,并且返回的输出添加到.output_area DOM 元素内的页面中,作为具有.output_subarea.output_text和唯一.output_result类的 div 元素。 打印或显示( IPython.display.display也有前两个类,特别是 print 有.output_stream .output_stdout

_oh是一个字典,整数与您在输入( .input_prompt div)左侧看到的相同。

换句话说,单元格内容按预期格式化。 而且您实际上可以添加自己的 HTML。

from IPython.display import display, HTML
display(HTML('<h1>HELLO WORLD</h1>'))
display(HTML(<script>alert("hello world");</script>'))

这表明您可以在 Python 单元格中添加 JS——但这有一个很大的缺陷。 同样,在 JS 中你可以执行 python 代码。

IPython.notebook.kernel.execute("python_variable="+JSON.stringify(jsVariable));

但是,在内核空闲时执行 JS IPython 调用。 因此,在访问python_variable之前,您必须等待单元格完成。 因此,在一个单元格中完成所有操作并使用常规单元格魔法是没有意义的。

因此,以下 JS 魔术将给出一个output字典,其键是单元格编号,值是内容。 如前所述,单元格内容已格式化,因此如果您想根据单元格中元素的类更改以下内容,您可以参考上述 CSS 类。

// querySelectorAll returns a NodeList which lacks most Array functions
// so destructuring into array
const outputs=[...document.querySelectorAll(".cell")].map(
        cell=> {
            const RawCellN=cell.querySelector(".input_prompt").innerText;
            // \xa0 is star. current: skip.
            if (RawCellN.match(/\[(\d+)\]/) === null) return null; 
            const cellN =  parseInt(RawCellN.match(/\[(\d+)\]/)[1]);
            const outputs= [...cell.querySelectorAll(".output_subarea")].map(
                subarea => subarea.innerText.trim());
            return [cellN, outputs.filter(out => out.length !== 0)];
        }
    ).filter(value => value !== null); // star cell was skipped.

// pass on the data to python
IPython.notebook.kernel.execute("outputs=dict("+JSON.stringify(outputs)+")")

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐