2013-12-08 1 views
2

Я пробовал:Как слить два ipython-ноутбука правильно, не получив json-ошибку?

cat file1.ipynb file2.ipynb > filecomplete.ipynb 

, так как ноутбуки просто JSON-файлы, но это дает мне ошибку

Unreadable Notebook: Notebook does not appear to be JSON: '{\n "metadata": {' 

Я думаю, они должны быть правильными файлами в формате JSON, потому что file1 и file2 каждой нагрузки индивидуально в nbviewer, и поэтому я не совсем уверен, что я делаю неправильно.

+0

http://stackoverflow.com/questions/1096554/combining-two-json-objects-in-to-one/1096577#1096577 –

ответ

-1

Конкатенация объекта 2 с некоторыми свойствами не всегда дает объект с теми же свойствами. Вот последовательность увеличения числа: 4 8 15 16 23 42, вот еще один 1 2 3 4 5 6 7. Конкатенация этих двух не является строго возрастающей: 4 8 15 16 23 42 1 2 3 4 5 6 7. То же самое касается Джсона.

Вам необходимо загрузить json-файл с помощью json lib и выполнить слияние, которое вы хотите сделать самостоятельно. Я полагаю, вы просто хотите объединить ячейки, но, возможно, вы хотите объединить рабочий лист; возможно, вы хотите объединить метаданные.

0

Этот скрипт Python объединяет все ноутбуки с именем prefix и присутствует на первом уровне заданного folder. Полученный ноутбук сохраняется в той же папке под именем "compil_" + prefix + ".ipynb".

import json 
import os 

folder = "slides" 
prefix = "quiz" 
paths = [os.path.join(folder, name) for name in os.listdir(folder) if name.startswith(prefix) and name.endswith(".ipynb")] 
result = json.loads(open(paths.pop(0), "r").read()) 
for path in paths: 
    result["worksheets"][0]["cells"].extend(json.loads(open(path, "r").read())["worksheets"][0]["cells"]) 
open(os.path.join(folder, "compil_%s.ipynb" % prefix), "w").write(json.dumps(result, indent = 1)) 

Внимание: метаданные являются первой тетради, и клетки тех только первого листа (который, кажется, содержит все клетки, в моей записной книжке, по крайней мере).

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