import os
import glob
import nbformat
from nbconvert import RSTExporter
from nbconvert.preprocessors import ExecutePreprocessor
def convert(nbfile):
basename, _ = os.path.splitext(nbfile)
meta = {"metadata": {"path": "."}}
with open(nbfile, "r", encoding="utf-8") as nbf:
nbdata = nbformat.read(nbf, as_version=4, encoding="utf-8")
runner = ExecutePreprocessor(timeout=600, kernel_name="probscale")
runner.preprocess(nbdata, meta)
img_folder = basename + "_files"
body_raw, images = RSTExporter().from_notebook_node(nbdata)
body_final = body_raw.replace(".. image:: ", ".. image:: {}/".format(img_folder))
with open(basename + ".rst", "w", encoding="utf-8") as rst_out:
rst_out.write(body_final)
for img_name, img_data in images["outputs"].items():
img_path = os.path.join(img_folder, img_name)
with open(img_path, "wb") as img:
img.write(img_data)
if __name__ == "__main__":
for nbfile in glob.glob("*.ipynb"):
convert(nbfile)