2016-07-05 80 views
1

我試圖自動化我的項目創建過程,並希望作爲它的一部分來創建一個新的jupyter筆記本,並將它填充一些單元格和內容,我通常在每個筆記本中都有這樣的內容(即導入,標題等)如何從代碼(python)創建/修改jupyter筆記本?

是否有可能通過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