Я использую 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'
Любые идеи, что это может быть?
Замечание: Выполнение 'eval (text)' не является хорошим способом загрузки JSON. Мы предоставляем [пакет nbformat] (http://nbformat.readthedocs.org/en/latest/api.html) для загрузки и записи файлов ноутбуков. –
Привет, Томас, Большое спасибо за ответ, это полезно. Я использовал nbformat, чтобы читать и успешно записывать ноутбук в новый файл ipynb. Моя следующая проблема заключается в том, что я действительно не понимаю, как редактировать dictionarry, прежде чем записывать его в файл. Есть ли какая-то документация о том, как получить доступ и отредактировать ячейки? –
Я не думаю, что есть хорошие документы, но объект ноутбука, который вы получаете от nbformat, следует структуре JSON ноутбука, поэтому 'nb.cells' будет списком ячеек. –