2016-04-07 6 views
0

私は、いくつかのインタラクティブなドキュメントを作成するために、jupiterノートブックとrootをC++カーネルで使用しています。ドキュメントにはいくつかのヒストグラムやその他のグラフが含まれているので、グラフをインタラクティブにするためにマジック%% jsrootを使用しています。魔法はイメージだけでなく、javascriptをプロデュースするので、インタラクティブにすることができます。Pythonスクリプトのあいまいなエラーメッセージ

すべては、nbconvertを使用してノートブックをpdfファイルに変換しようとするまで機能します。 JavaScriptはpdfに転送できないので、スクリプトを使用して%% jsrootという名前のセルを削除し、画像を作成するためにノートブックを再実行しています。 %% jsrootコマンドは別のセルで呼び出されます。 これは私のスクリプトです:それは私にエラーを与える

輸入列 インポートSYS inFileNameは= sys.argvの[1] outFileNameは= sys.argvの[2]

f = open(infilename) 
lines = f.readlines() 
f.close() 
text = "".join(lines) 

true=True 
false=False 

nbj = eval(text) 

cells = nbj["cells"] 

newcells=[] 
jscount = 0 
mustdecrement = False 
for cell in cells: 
    if cell["source"][0] == "%%jsroot on": 
    mustdecrement = True 
    jscount = 1 
    continue 
    else: 
    if mustdecrement: 
     cell["execution_count"] -= 1 
    newcells.append(cell) 
nbj["cells"] = newcells 

if jscount == 1: 
    newnb = open(outfilename,"w") 
    newnb.write(str(nbj)) 
    newnb.close() 

Traceback (most recent call last): File "removeJS.py", line 28, in cell["execution_count"] -= 1 KeyError: 'execution_count'

これはどんな考えですか?

+1

サイドノート: 'eval(text)'を実行することは、JSONをロードする良い方法ではありません。私たちは[nbformatパッケージ](http://nbformat.readthedocs.org/en/latest/api.html)を提供して、ノートブックファイルを読み書きします。 –

+0

こんにちはトーマス、ありがとう、それは役立つ多くの答えです。私は新しいipynbファイルにノートブックを読み込んで、それをうまく書くためにnbformatを使いました。私の次の問題は、ファイルに書き込む前に辞書を編集する方法を本当に理解していないということです。どのようにアクセスして、セルを編集する方法についてのいくつかのドキュメントですか? –

+1

良いドキュメントはないと思いますが、nbformatから取得したノートブックオブジェクトはノートブックのJSON構造に従っているので、 'nb.cells'はセルのリストになります。 –

答えて

1

私はこれを見つけました(単純な論理エラー)。 execution_countプロパティがマークダウンセルに存在しないため、markdownセルに存在しませんでした。

関連する問題