2013-12-08 24 views
2

我曾嘗試:如何正確合併兩個ipython筆記本而不會出現json錯誤?

cat file1.ipynb file2.ipynb > filecomplete.ipynb 

,因爲筆記本電腦是簡單的JSON文件,但是這給我的錯誤

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

我覺得這一定是有效的JSON文件,因爲文件1和文件2每個負載單獨成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加載json文件,並執行您想要自己完成的合併。我想你「只是」想連接單元格,但也許你想連接工作表;也許你想合併元數據。

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)) 

警告:元數據是那些第一臺筆記本,而這些細胞只在第一個工作表中(這似乎包含的所有單元格,在我的筆記本至少)。