一些背景
如果预计输出变化很大,则版本化笔记本可能会变得非常低效。我用Jupyter笔记本使用nbstripout
解决了这个问题,但到目前为止,我找不到Zeppelin笔记本的替代品。
由于nbstripout
使用nbformat
来解析ipynb
个文件,因此支持Zeppelin并不是一个简单的补丁。另一方面,目标并不复杂:只需清空所有"msg": "..."
。
目标
给定一个JSON文件,清空所有'paragraphs.result.msg'
个字段。
示例(架构):
{"paragraps": [{"result": {"msg": "Very long output..."}}]}
答案 0 :(得分:2)
在下面的(1)和(2)中,我假设传入的JSON看起来像这样:
{
"paragraphs": [
{
"result": {
"msg": "msg1"
}
},
{
"result": {
"msg": "msg2"
}
}
]
}
.paragraphs[].result.msg = ""
del(.paragraphs[].result.msg)
walk(if type == "object" then del(.msg) else . end)
(如果你的jq没有walk
,google:jq faq walk)
walk(if type == "object" and (.paragraphs|type) == "array"
then del(.paragraphs[].result?.msg?) else . end)
答案 1 :(得分:1)
答案 2 :(得分:0)
最好的解决方案(感谢@ steven-penny)就是运行:
git config filter.znbstripout.clean "jq '.paragraphs[].result.msg = \"\"'"
将设置一个名为znbstripout
的过滤器,用于调用jq
工具。然后,在您的.gitattributes
文件中,您可以放置:
*.json filter=znbstripout
以下内容可用作git hook:
#!/usr/bin/env python3
from glob import glob
import json
files = glob('**/note.json', recursive=True)
for file in files:
with open(file, 'r') as fp:
nb = json.load(fp)
for p in nb['paragraphs']:
if 'result' in p:
p['result']['msg'] = ""
with open(file, 'w') as fp:
json.dump(nb, fp, sort_keys=True, indent=2)