IPython 笔记本:计算笔记本中的单元格数

IPython Notebook: Count number of cells in notebook

回答 Stack Overflow 问题,我使用相同的 ipython 笔记本,这样可以更轻松地搜索以前给出的答案。

笔记本开始变慢了。我的问题是:如何计算笔记本中的单元格数量?

  1. 我建议您不要对所有内容都使用同一个 ipython 笔记本。如果使用多个笔记本会导致重复代码,您应该能够将通用功能分解到您的笔记本可以导入的实际 python 模块中。
  2. 笔记本只是一个json文件,如果你把文件当作json来读,就很容易了。

例如:

import json    
document = json.load(open(filepath,'r'))
for worksheet in document['worksheets']:
    print len(worksheet['cells'])    

您可以通过以下方式从命令行执行笔记本:

jupyter nbconvert --ExecutePreprocessor.allow_errors=True --to notebook --execute jupyter_notebook.ipynb

其中:jupyter_notebook.ipynb 应替换为您的 filename.ipynb

使用allow_errors=True,无论执行过程中遇到什么错误,notebook 都会执行到最后。输出笔记本将包含引发异常的所有单元格的堆栈跟踪和错误消息。

实际上不需要解析json。只需将其作为文本阅读并计算实例数,例如 "cell type":

with open(fname, 'r') as f:
    counter = 0
    for line in f:
        if '"cell_type":' in line:
            counter += 1

或者,甚至更简单,只需在文本编辑器中打开您的 .ipynb 笔记本,然后突出显示相同的文本位并通过按 ctrl+F(或用于搜索的任何绑定)查看计数).

如果任何单元格有降价,而你想避免这些,你也可以在 "cell_type": "code", 上搜索。

尽管正如其他人所说,您最好不要以这种方式存储您的代码。或者至少,我想您可以将其存储在将来更容易访问的方式中,如果您需要它以供参考。

python -c "import sys, json; print(len(json.load(open(sys.argv[1],'r'))['cells']))" <notebook_filename.ipynb>

基于.

的一行