2016-04-07 3 views
0

Я использую jupiter notebooks и root с ядром C++, чтобы создать некоторую интерактивную документацию. Документация содержит некоторые гистограммы и другие графики, поэтому я использую магический %% jsroot, чтобы сделать графики интерактивными. Магия использует javascript вместо изображений, чтобы они могли быть интерактивными.python script неоднозначное сообщение об ошибке

Все работает, пока я не попытаюсь использовать 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

Привет, Томас, Большое спасибо за ответ, это полезно. Я использовал nbformat, чтобы читать и успешно записывать ноутбук в новый файл ipynb. Моя следующая проблема заключается в том, что я действительно не понимаю, как редактировать dictionarry, прежде чем записывать его в файл. Есть ли какая-то документация о том, как получить доступ и отредактировать ячейки? –

+1

Я не думаю, что есть хорошие документы, но объект ноутбука, который вы получаете от nbformat, следует структуре JSON ноутбука, поэтому 'nb.cells' будет списком ячеек. –

ответ

1

Я нашел этот (простая логическая ошибка). Свойство execute_count не существует в ячейках уценки, чтобы оно не было найдено.

Смежные вопросы