2016-07-05 3 views
1

Я пытаюсь автоматизировать процесс создания проекта и хотел бы как часть его создать новый блок jupyter и заполнить его некоторыми ячейками и контентом, которые я обычно имею в каждом ноутбуке (т. Е. Импорте, титрах и т. Д.)Как создать/изменить блокнот jupyter из кода (python)?

Можно ли это сделать через python?

ответ

3

Вы можете сделать это, используя nbformat. Ниже пример, взятый из Creating an IPython Notebook programatically:

import nbformat as nbf 

nb = nbf.v4.new_notebook() 
text = """\ 
# My first automatic Jupyter Notebook 
This is an auto-generated notebook.""" 

code = """\ 
%pylab inline 
hist(normal(size=2000), bins=50);""" 

nb['cells'] = [nbf.v4.new_markdown_cell(text), 
       nbf.v4.new_code_cell(code)] 
fname = 'test.ipynb' 

with open(fname, 'w') as f: 
    nbf.write(nb, f) 
2

Это абсолютно возможно. Ноутбуки - это только json-файлы. Это notebook, например, просто:

{ 
"cells": [ 
    { 
    "cell_type": "markdown", 
    "metadata": {}, 
    "source": [ 
    "# Header 1" 
    ] 
    }, 
    { 
    "cell_type": "code", 
    "execution_count": 2, 
    "metadata": { 
    "ExecuteTime": { 
    "end_time": "2016-09-16T16:28:53.333738", 
    "start_time": "2016-09-16T16:28:53.330843" 
    }, 
    "collapsed": false 
    }, 
    "outputs": [], 
    "source": [ 
    "def foo(bar):\n", 
    " # Standard functions I want to define.\n", 
    " pass" 
    ] 
    }, 
    { 
    "cell_type": "markdown", 
    "metadata": {}, 
    "source": [ 
    "## Header 2" 
    ] 
    }, 
    { 
    "cell_type": "code", 
    "execution_count": null, 
    "metadata": { 
    "collapsed": true 
    }, 
    "outputs": [], 
    "source": [] 
    } 
], 
"metadata": { 
    "kernelspec": { 
    "display_name": "Python 2", 
    "language": "python", 
    "name": "python2" 
    }, 
    "language_info": { 
    "codemirror_mode": { 
    "name": "ipython", 
    "version": 2 
    }, 
    "file_extension": ".py", 
    "mimetype": "text/x-python", 
    "name": "python", 
    "nbconvert_exporter": "python", 
    "pygments_lexer": "ipython2", 
    "version": "2.7.10" 
    }, 
    "toc": { 
    "toc_cell": false, 
    "toc_number_sections": true, 
    "toc_threshold": 6, 
    "toc_window_display": false 
    } 
}, 
"nbformat": 4, 
"nbformat_minor": 0 
} 

Хотя неаккуратно это просто список объектов клеток. Я бы, вероятно, создал свой шаблон в фактическом ноутбуке и сохранил его, а не пытался создать исходный шаблон вручную. Если вы хотите добавить названия или другие переменные программно, вы всегда можете скопировать исходный текст в файле * .ipynb в файл python и вставить значения, используя форматирование строк.

+1

Спасибо за ответ! Был надеется, что есть API для добавления ячеек и т. Д., Поскольку я боюсь, что новые версии нарушат жестко закодированные схемы ... – oshi2016

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