44 lines
1.1 KiB
Markdown
44 lines
1.1 KiB
Markdown
|
nbmerge.py file
|
||
|
```
|
||
|
#!/usr/bin/env python
|
||
|
# Note, updated version of
|
||
|
# https://github.com/ipython/ipython-in-depth/blob/master/tools/nbmerge.py
|
||
|
"""
|
||
|
usage:
|
||
|
|
||
|
python nbmerge.py A.ipynb B.ipynb C.ipynb > merged.ipynb
|
||
|
"""
|
||
|
|
||
|
import io
|
||
|
import os
|
||
|
import sys
|
||
|
|
||
|
from IPython import nbformat
|
||
|
|
||
|
def merge_notebooks(filenames):
|
||
|
merged = None
|
||
|
for fname in filenames:
|
||
|
with io.open(fname, 'r', encoding='utf-8') as f:
|
||
|
nb = nbformat.read(f, as_version=4)
|
||
|
if merged is None:
|
||
|
merged = nb
|
||
|
else:
|
||
|
# TODO: add an optional marker between joined notebooks
|
||
|
# like an horizontal rule, for example, or some other arbitrary
|
||
|
# (user specified) markdown cell)
|
||
|
merged.cells.extend(nb.cells)
|
||
|
if not hasattr(merged.metadata, 'name'):
|
||
|
merged.metadata.name = ''
|
||
|
merged.metadata.name += "_merged"
|
||
|
print(nbformat.writes(merged))
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
notebooks = sys.argv[1:]
|
||
|
if not notebooks:
|
||
|
print(__doc__, file=sys.stderr)
|
||
|
sys.exit(1)
|
||
|
|
||
|
merge_notebooks(notebooks)
|
||
|
|
||
|
|
||
|
```
|