【问题标题】:IPython Notebook: Count number of cells in notebookIPython Notebook:计算笔记本中的单元格数
【发布时间】:2016-08-12 19:21:48
【问题描述】:

回答问题 Stack Overflow,我使用相同的 ipython notebook,这样更容易搜索以前给出的答案。

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

【问题讨论】:

  • 你可以试试 kernel>restart & run all。然后滚动到最后一个单元格,看看 In[#] 中的 # 是什么
  • @Sam,如果所有单元格都有有效代码,这将起作用。如果运行停止的任何地方出现错误......如果您是笔记本的用户,我发现它不容易拆分笔记本。
  • 笔记本格式为 JSON 文件。解析它,然后计算 json 结构的右边部分。
  • 作为一种替代方法,我 make directories 我的 SO 解决方案。您可能会发现只需在目录中为每个问题创建一个笔记本即可。

标签: python ipython ipython-notebook jupyter-notebook


【解决方案1】:
  1. 我建议您不要对所有内容都使用相同的 ipython 笔记本。如果使用多个笔记本会导致重复代码,您应该能够将常用功能分解到笔记本可以导入的实际 Python 模块中。
  2. notebook 只是一个 json 文件,如果你以 json 格式读取文件,就可以轻松完成。

例如:

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

【讨论】:

  • 这是旧版本的笔记本格式;当前版本取消了“工作表”。如果您使用nbformat library,它会在加载时自动将笔记本转换为指定格式的版本。
  • 谢谢,不知道。
【解决方案2】:

实际上不需要解析 json。只需将其读取为文本并计算例如“细胞类型”的实例:

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",

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

【讨论】:

  • 有趣的是,我在回到 SO 之前就这样做了。 [794] 这真的不是问题,只要我保存、关闭、退出并重新打开。这会清除内存。而代码和输出仍然存在。
【解决方案3】:

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

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

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

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

【讨论】:

  • 由于这是在浏览器外部运行,是否可以找到输出内存使用情况——不是针对这个项目,而是针对另一个项目。在浏览器中,我可以获取对象的内存使用情况。
  • 顺便说一句,您也可以通过它的 API 接口在浏览器中运行它。参考: Docs>。我建议您仔细查看传递给ExecutePreprocessortraitletsarguments,它基本上具有各种可配置选项,如超时、版本支持等。
【解决方案4】:
python -c "import sys, json; print(len(json.load(open(sys.argv[1],'r'))['cells']))" <notebook_filename.ipynb>

基于https://stackoverflow.com/a/38925464/588437的单行代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    • 2015-03-18
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多