IPython Notebook带有nbconvert
,可以 将 笔记本 导出
为其他格式。但是,如何在相反方向转换文本?我之所以问,是因为我已经有了不同格式的资料和良好的工作流程,但是我想利用Notebook的交互式环境。
可能的解决方案:可以通过导入.py
文件来创建笔记本,并且文档指出,当nbconvert
将笔记本导出为python脚本时,它将指令嵌入到可用于重新创建笔记本的注释中。但是这些信息带有关于此方法局限性的免责声明,并且在我能找到的任何地方都没有记录接受的格式。(奇怪的是,在描述笔记本的JSON格式的部分中显示了一个示例)。谁能提供更多信息,或者提供更好的选择?
编辑(2016年3月1日): 接受的答案不再起作用,因为Notebook API的版本4不支持此输入格式。 我添加
了一个自我解答,
展示了如何使用当前(v4)API导入笔记本。(我不接受当前的答案,因为它可以解决我当时的问题,并指出我在自我答案中使用的资源。)
由于接受的答案中的代码不再起作用,因此我添加了此自我答案,该答案显示了如何使用当前(v4)API导入笔记本。
输入格式
IPython Notebook API的版本2和3可以导入带有特殊结构注释的python脚本,并根据需要将其分解为单元格。这是一个示例输入文件(此处为原始文档)。前两行被忽略,并且是可选的。(事实上,读者会忽略coding:和
# -*- coding: utf-8 -*-
# <nbformat>3.0</nbformat>
# <markdowncell>
# The simplest notebook. Markdown cells are embedded in comments,
# so the file is a valid `python` script.
# Be sure to **leave a space** after the comment character!
# <codecell>
print("Hello, IPython")
# <rawcell>
# Raw cell contents are not formatted as markdown
(API还接受过时的指令
如何汇入
由于某种原因,Notebook API的版本4不支持此格式。它仍然是一种不错的格式,因此通过导入版本3并进行升级来支持它是值得的麻烦。原则上,这只是两行代码以及I / O:
from IPython.nbformat import v3, v4
with open("input-file.py") as fpin:
text = fpin.read()
nbook = v3.reads_py(text)
nbook = v4.upgrade(nbook) # Upgrade v3 to v4
jsonform = v4.writes(nbook) + "\n"
with open("output-file.ipynb", "w") as fpout:
fpout.write(jsonform)
但是没有那么快!实际上,笔记本API有一个令人讨厌的错误:如果输入中的最后一个单元格是降价单元格,v3.reads_py()则会丢失它。最简单的解决方法是
text += """
# <markdowncell>
# If you can read this, reads_py() is no longer broken!
"""
以下内容适用于IPython 3,但不适用于IPython 4。
IPython
API具有用于读取和写入笔记本文件的功能。您应该使用此API,而不是直接创建JSON。例如,以下代码片段将脚本test.py
转换为Notebook
test.ipynb
。
import IPython.nbformat.current as nbf
nb = nbf.read(open('test.py', 'r'), 'py')
nbf.write(nb, open('test.ipynb', 'w'), 'ipynb')
关于nbf.read理解的.py文件的格式,最好仅查看解析器类IPython.nbformat.v3.nbpy.PyReader。可以在这里找到代码(它不是很大):
https://github.com/ipython/ipython/blob/master/jupyter_nbformat/v3/nbpy.py
编辑: 此答案最初是为IPyhton 3编写的。我不知道如何使用IPython
4正确执行此操作。这是上面链接的更新版本,指向nbpy.py
IPython 3.2.1发行版中的版本:
https://github.com/ipython/ipython/blob/rel-3.2.1/IPython/nbformat/v3/nbpy.py
基本上,您使用特殊注释,例如# <codecell>
或# <markdowncell>
来分隔单个单元格。查看中的line.startswith
语句以PyReader.to_notebook
获取完整列表。
问题内容: 我有以下格式的日期(yyyymmdd,18751104,19140722)…将其转换为date()的最简单方法是什么?或者使用mktime()和子字符串是我的最佳选择…? 问题答案: 使用含日期到字符串转换Unix时间戳: 您可以将结果作为第二个参数传递给自己重新格式化日期: 注意 在1970年Unix时代之前的日期将失败。 另一种适用于1970年之前的日期的替代方法:
问题内容: 我有一个名为“ imposm3_restaurant”的简单表,其列为[id,name,geometry],我想将这些数据转换为geoJSON,我正在使用此功能 结果是这样的: 它没有当前的几何图形,您知道功能上有什么问题吗:我使用的是Postgres 9.3和PostGIS 2.2 问题答案: 您的输出是有效的geojson文件,但是使用投影EPSG:3857投影了几何。 您可以在大
问题内容: 我正在尝试将图像从转换为格式。我正在使用。这是到目前为止我一直尝试的。 但我认为图像未转换为CV格式。窗口向我显示了一个大的棕色图像。将图像从转换为格式时,我在哪里出错? 另外,为什么我需要输入访问功能? 问题答案: 用这个:
问题内容: 我有一些格式的数据: 我需要将其转换为格式 如何在SQL中执行此操作? 问题答案: 如果您的得分列是固定的,并且不需要汇总,则可以使用多个和语句来生成所需的数据形状。例如 SQL小提琴:http://sqlfiddle.com/#!6 / f54b2 / 4/0
问题内容: 我尝试使用json格式的文件作为输入。这是示例数据的片段。 可以在r中使用这种复杂的json格式制作一个csv,以便更平滑地处理数据吗? 例如,有以下基本类别:基本信息照片创建者位置类别网址 可以制作带有basic_information.id,creator.id等子类别类别的csv文件吗? 问题答案: 在研究您的答案时,我在评论中张贴了一些链接,但现在我非常确信这是解决问题的方法。
问题内容: 在Java中,如果要向服务器上的表单发送数据,则表单类型为: 在这种情况下,我必须使用HttpPost方法,因为表单接受表单定义(初始化)中所述的方法“ post”: 在我的示例(Android解决方案)中,我正在使用 值,因为它们是服务器发布帖子所需的一次。如果尚未对服务器进行编程,在哪里可以找到服务器的要求?我正在使用WireShark软件查看客户端与服务器之间的所有传入响应或传出