2017-02-15 11 views
1

У меня есть несколько ноутбуков Jupyter, которые связаны друг с другом таким образом, что Notebook1.ipydb содержит ссылку на Notebook2.ipydb с уценкой [Notebook2](Notebook2.ipynb) и наоборот.Как экспортировать и сохранять связанные Jupyter ноутбуки?

При экспорте всех ноутбуков в HTML через nbconvert сохраняется ссылка на Notebook2.ipynb. Я хотел бы изменить эту ссылку на экспортированный файл Notebook2.html, поэтому связанные файлы HTML функционируют как статический веб-сайт.

Я попытался определить, работал ли я в iPython с помощью get_ipython().__class__.__name__, но он выполняет этот код до конвертирования в 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» \ [([^]] *) \] \ (([^)] *) \. Ipynb \) "для регулярного выражения и' r "[\ 1] (\ 2.html) msgstr "для замены текста. Таким образом, текст ссылки не должен совпадать с первой частью имени файла. –

+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

 Смежные вопросы

  • Нет связанных вопросов^_^