🙆♀️
jupyter-notebookにmarkdownエクスポートあったけど出力が趣味にあわなかったのでスクリプト書いた
あまり知られてないと思われるというか、小生もわりと最近知ったのだが、jupyter-notebookにはエクスポート機能がある。
検索すると出てくるのはコマンドラインだが、当然のことながらUIにもメニューがある。
肝心のmarkdown出力は、やたらと空改行が多くて冗長に見えたため、小生の趣味には合わなかった。なので似たようなことをするpython3スクリプトを書いた。
一方、html出力は悪くなかった。別記事の検証につかったnotebookを出力した例を示す。
jupyter-notebookのノートブックは ipynb という拡張子にはなってるが、実は中身はただのJSONである。 オフィシャルでは英語の仕様書は存在する。
.....しかし、それとは無関係に、jsonの中身を探検しながら書いたスクリプトがこれ。
#python3
import glob
import sys
import os.path
import json
def mdquote(q:str,ol:list):
print(f"```{q}")
print("".join(ol))
print("```")
print("")
for fn in sys.argv[1:] or glob.glob(f"*.ipynb"):
rawnbbook = json.load(open(fn))
bn = os.path.basename(fn)
##print(pno)
assert rawnbbook["nbformat"]==4
assert rawnbbook["metadata"]["kernelspec"]["name"] == "python3"
##print()
sys.stdout = open(f"{bn}.md","w")
for cell1 in rawnbbook["cells"]:
mdquote("python",cell1["source"])
for outputpartial in cell1["outputs"]:
if outputpartial["output_type"] == "stream":
print(">"+(">".join(outputpartial["text"])))
elif outputpartial["output_type"] == "execute_result":
for tt,vv in outputpartial["data"].items():
print(">"+(">".join(vv)))
elif outputpartial["output_type"] == "error":
print(">"+outputpartial["traceback"][-1])
else:
print(outputpartial)
print("----")
Discussion