Created
February 28, 2012 22:47
-
-
Save minrk/1935808 to your computer and use it in GitHub Desktop.
downgrade v3 ipython notebooks to v2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"""Simple utility script for semi-gracefully downgrading v3 notebooks to v2""" | |
import io | |
import os | |
import sys | |
from IPython.nbformat import current | |
def heading_to_md(cell): | |
"""turn heading cell into corresponding markdown""" | |
cell.cell_type = "markdown" | |
level = cell.pop('level', 1) | |
cell.source = '#'*level + ' ' + cell.source | |
def raw_to_md(cell): | |
"""let raw passthrough as markdown""" | |
cell.cell_type = "markdown" | |
def downgrade(nb): | |
"""downgrade a v3 notebook to v2""" | |
if nb.nbformat != 3: | |
return nb | |
nb.nbformat = 2 | |
for ws in nb.worksheets: | |
for cell in ws.cells: | |
if cell.cell_type == 'heading': | |
heading_to_md(cell) | |
elif cell.cell_type == 'raw': | |
raw_to_md(cell) | |
return nb | |
def downgrade_ipynb(fname): | |
base, ext = os.path.splitext(fname) | |
newname = base+'.v2'+ext | |
print "downgrading %s -> %s" % (fname, newname) | |
with io.open(fname, 'r', encoding='utf8') as f: | |
nb = current.read(f, 'json') | |
nb = downgrade(nb) | |
with open(newname, 'w') as f: | |
current.write(nb, f, 'json') | |
if __name__ == '__main__': | |
map(downgrade_ipynb, sys.argv[1:]) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment