Jupyter notebookのipynbファイルが複数あって、それらをまとめてhtmlファイルに変換してから、一箇所にまとめたい場合に使えるスクリプトです。
ファイルが複数のフォルダにまたがって存在しても、再帰的にipynbファイルを検索して変換します。
まず結論から
以下のスクリプトを使って変換できます。
import shutil
from pathlib import Path
import subprocess
output_folder = "htmlファイルの保存先のフォルダパス"
notebook_folder = "ipynbファイルが保存されているフォルダのパス"
path_to_notebook_folder = Path(notebook_folder)
path_to_output_folder = Path(output_folder)
for path_to_ipynb in path_to_notebook_folder.rglob("*.ipynb"):
print(str(path_to_ipynb))
proc = subprocess.run(["jupyter", "nbconvert", "--to", "html", str(path_to_ipynb)], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print(proc.stdout.decode("utf8"))
print(proc.stderr.decode("utf8"))
path_to_src_html = path_to_ipynb.with_suffix(".html")
path_to_dest_html = path_to_output_folder.joinpath(path_to_src_html.name)
shutil.move(str(path_to_src_html), str(path_to_dest_html))
コードについての説明
ファイルの再帰的検索
pathlib.Path
のrglob("*.ipynb")
によって、指定フォルダ以下のipynbファイルを再帰的に検索します。再帰的に検索したくない場合にはglob("*.ipynb")
を使います。
for path_to_ipynb in path_to_notebook_folder.rglob("*.ipynb"):
print(str(path_to_ipynb))
jupyter notebookのファイルをhtmlに変換
jupyter notebookのファイルをhtmlに変換するには、linuxコマンドとして
jupyter nbconvert --to html "ipynbファイルパス"
とします。
linuxコマンドをpythonで実行
linuxコマンドをpythonで実行するために、subprocess.run
を使います。
subprocess.run(["jupyter", "nbconvert", "--to", "html", "ipynbファイルパス"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
pythonでファイルを移動
最後に、shutil.move
で生成したhtmlファイルを指定フォルダに移動します。
shutil.move(str(path_to_src_html), str(path_to_dest_html))