如何正确合并两个ipython笔记本而不会出现json错误?

时间:2013-12-08 14:44:52

标签: json ipython-notebook

我试过了:

cat file1.ipynb file2.ipynb > filecomplete.ipynb 

因为笔记本只是json文件,但这给了我错误

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

我认为这些必须是有效的json文件,因为file1和file2每个都单独加载到nbviewer中,所以我不完全确定我做错了什么。

2 个答案:

答案 0 :(得分: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))

警告:元数据是第一个笔记本的元数据,只有第一个工作表的元数据(至少在我的笔记本中似乎包含所有单元格)。

答案 1 :(得分:-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加载json文件并执行您想要自己进行的合并。我想你“只是”想要连接单元格,但也许你想要连接工作表;也许你想合并元数据。