问题 Jupyter:编写一个自定义魔法,修改它所在单元格的内容


在Jupyter笔记本中,有一些内置的魔法可以改变笔记本电脑的内容。例如, %load magic使用文件系统上文件的内容替换当前单元格的内容。

如何编写一个类似的自定义魔术命令?

到目前为止我所拥有的东西是stdout

def tutorial_asset(line):
    print('hello world')


def load_ipython_extension(ipython):
    ipython.register_magic_function(tutorial_asset, 'line')

我可以加载它 %load_ext tutorial_asset。但是从那里我迷失了。

[编辑]:

我找到了一种方法来访问交互式shell实例:

  @magics_class
  class MyMagics(Magics):

      @line_magic
      def tutorial_asset(self, parameters):
          self.shell

self.shell 对象似乎可以完全访问笔记本中的单元格集,但是我能找到修改单元格的唯一方法就是这样做 self.shell.set_next_input('print("hello world")')。这还不够,因为在Jupyter笔记本中,跳过输入单元格,并且它不会覆盖输入单元格,而是在它之后创建一个新的输入单元格。

这没关系,但如果我第二次运行笔记本,它会创建另一个加载了相同文件的输入单元,这很烦人。我可以通过检查内容是否已经在下一个单元格中来加载一次吗?


6688
2018-06-24 19:21


起源



答案:


编辑:进一步挖掘后,我发现当前构建的笔记本不能同时做到这两点。


10
2018-06-29 15:00



这种技术为我创建了一个新单元,而不是修改当前单元格。我错过了什么吗? - ajp619


答案:


编辑:进一步挖掘后,我发现当前构建的笔记本不能同时做到这两点。


10
2018-06-29 15:00



这种技术为我创建了一个新单元,而不是修改当前单元格。我错过了什么吗? - ajp619