【问题标题】:Jupyter (IPython) notebook: Convert an HTML notebook to ipynbJupyter (IPython) 笔记本:将 HTML 笔记本转换为 ipynb
【发布时间】:2015-05-12 09:58:59
【问题描述】:

我已将 Jupyter/IPython 笔记本转换为 HTML 格式,随后丢失了原始 ipynb 文件。

有没有一种简单的方法可以从转换后的 HTML 文件生成原始笔记本文件?

【问题讨论】:

  • 将 html 文件中的代码复制到新笔记本中不适合您吗?我想这是一个相当不寻常的问题,我怀疑是否有一种简单的方法可以做到这一点。
  • @cel,是的,这是一个选项,只是对于大型笔记本电脑不太实用。但是由于 ipynb JSON 文件和转换后的 HTML 具有或多或少相同的信息,我想知道是否有可用的转换器。
  • 我不相信有可用的预制转换器。
  • 是的,我也想找一个工具来进行从 html 到 ipynb 的对话。但还没有结果。

标签: python ipython jupyter-notebook jupyter nbconvert


【解决方案1】:

我最近使用 BeautifulSoup 和 JSON 将 html notebook 转换为 ipynb。诀窍是查看笔记本的 JSON 模式并进行模拟。该代码仅选择输入代码单元格和降价单元格

这是我的代码

from bs4 import BeautifulSoup
import json
import urllib.request
url = 'http://nbviewer.jupyter.org/url/jakevdp.github.com/downloads/notebooks/XKCD_plots.ipynb'
response = urllib.request.urlopen(url)
#  for local html file
# response = open("/Users/note/jupyter/notebook.html")
text = response.read()

soup = BeautifulSoup(text, 'lxml')
# see some of the html
print(soup.div)
dictionary = {'nbformat': 4, 'nbformat_minor': 1, 'cells': [], 'metadata': {}}
for d in soup.findAll("div"):
    if 'class' in d.attrs.keys():
        for clas in d.attrs["class"]:
            if clas in ["text_cell_render", "input_area"]:
                # code cell
                if clas == "input_area":
                    cell = {}
                    cell['metadata'] = {}
                    cell['outputs'] = []
                    cell['source'] = [d.get_text()]
                    cell['execution_count'] = None
                    cell['cell_type'] = 'code'
                    dictionary['cells'].append(cell)

                else:
                    cell = {}
                    cell['metadata'] = {}

                    cell['source'] = [d.decode_contents()]
                    cell['cell_type'] = 'markdown'
                    dictionary['cells'].append(cell)
open('notebook.ipynb', 'w').write(json.dumps(dictionary))

这是print(soup.div)输出的一部分

div class="container">
<div class="navbar-header">
<button class="navbar-toggle collapsed" data-target=".navbar-collapse" data-toggle="collapse" type="button">
<span class="sr-only">Toggle navigation</span>
<i class="fa fa-bars"></i>
</button>
<a class="navbar-brand" href="/">
<img src="/static/img/nav_logo.svg?v=479cefe8d932fb14a67b93911b97d70f" width="159"/>
</a>
</div>
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav navbar-right">
<li>
<a class="active" href="http://jupyter.org">JUPYTER</a>
</li>
<li>
<a href="/faq" title="FAQ">
<span>FAQ</span>

生成的 ipynb 文件的屏幕截图,加载到我的本地 jupyter 并运行所有单元后

【讨论】:

  • 太好了。感谢分享。
  • 像魅力一样工作!我只需要安装 lxml (pip install lxml) 并创建 ipynb!
  • ❤️额外的基本操作步骤 1. 创建一个新文件 intonotebook.py 打开它的代码编辑器(不在 Word 中) 2. 复制粘贴此答案的第一块代码。 3. 将第一行 4 更改为您的文件 web。但是如果文件在您的计算机上,请将 # 放在第 4 行和第 5 行的前面,并在第 7 行之前删除 #。然后将第 7 行更改为您的 html 文件所在的位置(# 表示“注释”)。确保您编辑的行的开头没有空格。保存文件。 4. 打开终端,进入您创建文件的文件夹并输入python intonotebook.py。 5.要更改输出文件的名称,请更改最后一行
  • 是否可以将单元格的输出保留在转换后的 .ipynb 文件中?
  • 删除行 cell['outputs'] = [] 应该允许保留输出
猜你喜欢
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
  • 2019-04-26
  • 1970-01-01
  • 1970-01-01
  • 2019-06-17
  • 2013-04-06
  • 1970-01-01
相关资源
最近更新 更多