以前の記事で、jupyter notebookで自作したクラスを自動でimportする方法を紹介しました。この機能はjupyter notebook上でスクリプトを保存するたびにpythonファイルやhtmlファイルを自動生成&更新してくれるのでとても便利なのですが、新規作成時にも’Untitled.txt’や’Untitled.html’というファイルが生成されてしまいます。
最初は気づかなかったのですが、「テキストファイルなんて作った記憶はないのに。。。」と不思議に思ったのですがスルーしており、そのうちいろんなフォルダに生成されているので気味悪くなってきたので、対処しようと思いました。
初回時にファイルを生成しないようにスクリプトを修正
そこで、今回は前回作成したスクリプトを若干修正して、ファイル名がまだつけられていない状態(つまり’Untitled’)のときはファイルを生成しないように処理を追加します。
configファイル(jupyter_notebook_config.py)を下記のように修正します。ファイルは通常ホームディレクトの下に.jupyterフォルダがあり、その中に入っています。詳しくは過去の記事を参照してください。
#--------------------------
# Create html and py file automatically
#--------------------------
import os
from subprocess import check_call
def post_save(model, os_path, contents_manager):
if model['type'] != 'notebook':
return
d, fname = os.path.split(os_path)
if 'Untitled' in fname: # ここに条件を追加
return # ファイル名ににUntitledを含むときは終了
else: # ファイル名にUntitledを含まないときはファイルを生成
check_call(['jupyter', 'nbconvert', '--to', 'script', fname], cwd=d)
check_call(['jupyter', 'nbconvert', '--to', 'html', fname], cwd=d)
c.FileContentsManager.post_save_hook = post_save
これでファイルを保存後、jupyter notebookを再起動して、Pythonファイルを新規作成します。
すると、Untitled.ipynbファイルは作成されますが、それ以外のUntitled.txtやUntitled.htmlは生成されなくなりました。
そして、このファイルをTest1に名前を変更して保存します。
すると、きちんとTest1.pyやTest1.htmlが生成されています。
nbconvertでPDFやLaTexなども生成可能
今回は簡単な変更で、これだけだと少々面白くないので、もう少し追加を。
このスクリプトでファイルを生成しているのは下記で行われています。
check_call(['jupyter', 'nbconvert', '--to', 'script', fname], cwd=d)
このnbconvertという関数は下記の種類のファイルを生成することが可能です。毎回生成することはpy以外にあまり必要ないと思いますが、レポート作成の際などはPDFやLaTexあたりは役に立つと思いますので、この設定をしておくのも良いかもしれません。
- HTML
- LaTeX
- Reveal.js HTML slideshow
- Markdown
- Ascii
- reStructuredText
- executable script
- notebook
コメント