编程语言
首页 > 编程语言> > IPython Notebook从原始文本单元格读取字符串

IPython Notebook从原始文本单元格读取字符串

作者:互联网

我的IPython Notebook项目中有一个原始文本单元格.

有没有一种方法可以通过内置函数或类似方法将文本作为字符串获取?

解决方法:

我的回答(可能不令人满意)分为两个部分.这是基于对iPython结构的个人调查,完全有可能我错过了一些可以直接回答问题的东西.

本届会议

在当前会话期间输入的代码单元的原始文本可在笔记本中使用列表In来使用.

因此,当前单元格的原始文本可以通过单元格中的以下表达式返回:

In[len(In)-1]

例如,评估包含以下代码的单元格:

print "hello world"
three = 1+2
In[len(In)-1]

产生相应的Out []值:

u'print "hello world"\nthree = 1+2\nIn[len(In)-1]'

因此,在活动的笔记本会话中,您可以按In [n]访问单元格的原始文本,其中n是所需单元格的显示索引.

但是,如果在上一个Notebook会话期间输入了单元格,随后又关闭并重新打开了该会话,则该单元格将不再起作用.另外,似乎仅代码单元包括在In数组中.

此外,这不适用于非代码单元格,因此不适用于原始文本单元格.

保存的笔记本会话中的单元格

在我的研究中,我发现从以前的会议中获取原始文本的唯一方法是读取原始笔记本文件.有一个文档页面Importing IPython Notebooks as Modules描述了如何执行此操作.关键代码在In [4]中:

    # load the notebook object
    with io.open(path, 'r', encoding='utf-8') as f:
        nb = current.read(f, 'json')

其中current是在Module: nbformat.current中描述的API的实例.

返回的笔记本对象作为嵌套的字典和列表结构访问,例如:

    for cell in nb.worksheets[0].cells:
        ...

为此问题所列举的单元格对象具有两个关键字段:

> cell.cell_type是单元格的类型(“代码”,“降价”,“原始”等).
> cell.input是单元格的原始文本内容,为字符串列表,每行文本都有一个条目.

通过查看构成已保存的iPython笔记本的JSON数据,可以看到很多内容.

除了笔记本中的“提示号”字段(每当重新评估该字段时似乎都会更改)之外,我都找不到方法来创建对笔记本单元的稳定引用.

结论

我找不到原始问题的简单答案.我发现的内容已在上面介绍.不知道原始问题背后的动机,我不知道这是否足够.

我寻找的但无法识别的是一种可以在笔记本本身内部引用当前笔记本的方式(例如,通过类似get_ipython()的函数).那并不意味着它不存在.

我的回应中另一个缺失的部分是引用特定单元格的任何稳定方式. (例如,查看笔记本文件格式,原始文本单元格仅由单元格类型(“原始”)和原始文本本身组成,尽管看起来还可能包含单元格元数据.)这建议直接引用a的唯一方法单元格是通过其在笔记本中的位置进行的,但是在编辑笔记本时,主题也会发生变化.

(作为牛津大学参加http://aaronswartzhackathon.org的一部分进行了研究和回答)

标签:ipython,ipython-notebook,python
来源: https://codeday.me/bug/20191029/1956985.html