【问题标题】:Search Jupyter notebook markdown cells from command line从命令行搜索 Jupyter 笔记本降价单元格
【发布时间】:2018-10-19 16:48:48
【问题描述】:

我使用ag 搜索我的笔记。我的笔记记录在 Jupyter 笔记本中包含的 Markdown 文件和 Markdown 单元格中。

我可以使用ag --markdown ... 方便地搜索 Markdown 文件。如果可以使用 Jupyter 笔记本文件完成类似的操作,那将非常方便。但这需要ag 理解这些笔记本的格式。

我的问题:有没有办法在 Jupyter 笔记本文件中在 Markdown 单元格中搜索给定字符串?我可以接受解决方案中使用的任何模式匹配器(aggrepack、...)。

p.s. 笔记本由 JSON 组成。这是一个示例:

$ head notebook.ipynb
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "THIS IS A MARKDOWN STRING"
   ]
  },
  {

【问题讨论】:

  • 您能否详细说明您的问题。从它的声音来看,您只是询问如何提供您要搜索的目录的路径,这是使用 ag 的标准方法。
  • 感谢您的关注。希望我已经澄清了我的问题 - 请参阅编辑。

标签: grep jupyter-notebook markdown ack ag


【解决方案1】:

我希望使用 jq 过滤掉 python 笔记本的所有降价单元。例如,如果你只想吐出所有的 markdown 源代码,你可以使用以下代码:

$< notebook.ipynb | jq '.cells[]|select(.cell_type == "markdown")|.source[]'

jq 速度很快,在将 ipython 笔记本保存到 git 时用于更复杂的解决方案,例如:Using IPython notebooks under version control

【讨论】:

  • 这确实比@gboffi 的回答快了一个数量级。谢谢。
【解决方案2】:

我不知道ag 是否可以与过滤器接口,但要 从笔记本文件中获取 Markdown,以下 Python 代码就足够了

import nbformat
from sys import argv
nb = nbformat.read(argv[1], nbformat.NO_CONVERT)
for cell in nb.cells:
    if cell.cell_type == 'markdown' : print(cell.source)

【讨论】: