2017-02-15 95 views
1

我有多个彼此链接的Jupyter笔记本,以便Notebook1.ipydb包含链接到Notebook2.ipydb与降价[Notebook2](Notebook2.ipynb),反之亦然。如何导出和保存链接的Jupyter笔记本?

当通过nbconvert将所有笔记本导出为HTML时,将保留到Notebook2.ipynb的链接。我想将链接更改为导出的Notebook2.html,以便链接的HTML文件充当静态网站。

我试图检测我是否正在使用get_ipython().__class__.__name__在iPython中运行,但它在转换为HTML之前执行此代码

有没有办法检测一个静态文件来有条件地渲染正确的降价?有另一种方法来保存链接的笔记本电脑吗?

回答

3

只有两种选择。一种是首先链接到Notebook2.html,另一种是为nbconvert创建自定义预处理器。

from nbconvert.preprocessors import Preprocessor 
import re 


class CustomPreprocessor(Preprocessor): 

    def preprocess_cell(self, cell, resources, index): 

     if 'source' in cell and cell.cell_type == "markdown": 
      cell.source = re.sub(r"\[(.*)\]\(\1\.ipynb\)",r"[\1](\1.html)",cell.source) 

     return cell, resources 

保存这一个文件,然后添加到您的nbconvert配置文件(位于~/.jupyter/jupyter_nbconvert_config.py或者可以使用命令jupyter nbconvert --generate-config生成)行:

c.HTMLExporter.preprocessors = ['CustomPreprocessor.CustomPreprocessor']

这假设定制预处理器文件被命名为CustomPreprocessor,并且与您要转换的文件位于相同的目录中。您也可以将其作为模块正确安装。

+0

不错的解决方案。对于正则表达式和'r'[\ 1](\ 2.html),我使用了'r'\ [([^]] *)\(([^)] *)\。ipynb \)“ “'替换文字。这样链接文本不必与文件名的第一部分相匹配。 –

+0

@TheodoreNorvell正则表达式确实更好,因为它更一般。很高兴你喜欢我的回答:) –

+0

很酷的东西,也为我工作。我已经有了一个'nbconvert.HTMLExporter'实例,我附加了预处理器来使用[register_preprocessor](https://ipython.org/ipython-doc/3/api/generated/IPython.nbconvert.exporters.exporter.html# IPython.nbconvert.exporters.exporter.Exporter.register_preprocessor)。这样我不需要触摸配置。 – Jeronimo