从另一个pynote选择性导入

2024-03-29 10:38:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我把我的Jupyter笔记本整理成:data.ipynbmethods.ipynb和{}。如何在笔记本中有选择地使用eem>笔记本中的数据?在

我知道nbimporter和{},但这两个都没有提供变量的选择性导入。有一个选项可以导入定义(包括大写的变量),但这对我不起作用,因为我必须将笔记本中的大多数变量转换为大写。在

我宁愿导入除两个或三个需要很长时间才能计算的单元格之外的所有内容。理想情况下,我希望将一些任务的执行推迟到我访问它们的那一刻(延迟评估),但我理解这可能很难实现。在

以下是伪代码中的概述(每行代表一个单元格):

data.ipynb

raw_data = load_data()
dataset = munge(raw_data)
describe(dataset)             # I want this line to be skipped at import

methods.ipynb

^{pr2}$

results.ipynb

import data
import methods
result = methods.method(data.dataset)
describe(result)

动机是我的真实数据和方法笔记本:

  • 要长得多而且复杂,所以我想用一个导入系统
  • 只有几个单元格的计算时间超过秒

此外,无法用methods.py文件替换方法笔记本。事实上,我有这样一个文件,其中包含了我的方法的实现细节。笔记本更像是一个指定默认参数、展示我的方法如何工作以及解释示例结果的地方。在

这个问题本质上是一个组合:

我通读了这两个问题的答案,没有一个符合我的要求。在

在我下面的答案中,我提出了我的解决方案,使用自定义的细胞魔术和猴子补丁。但是,我更喜欢这样一种解决方案,它允许指定排除/包含哪些单元格/表达式,而不包括在原始笔记本(例如data.ipynb)中,而是包含在目标笔记本中(例如methods.ipynb)中。在

例如,它可以使用正则表达式:

# all variables starting with 'result' would be ignored
nbimporter.options['exclude'] = '^result.*'

或者(更好)懒惰的评价:

# only `a` and `b` would be evaluated and imported
from data import a, b

所有的想法都将得到赞赏!在


Tags: to数据方法importdataraw笔记本be
1条回答
网友
1楼 · 发布于 2024-03-29 10:38:31

到目前为止,我一直在猴子修补nbimporter并使用cell magic选择要排除的单元格:

from IPython.core import magic

@magic.register_cell_magic
def skip_on_import(args, cell):
    get_ipython().ex(cell)

细胞去除器猴子补丁的代码:

^{pr2}$

还有一个实际的例子,data.ipynb

data.ipynb

methods.ipynb(末尾的异常是有意的-它意味着成功!)公司名称:

methods.ipynb

编辑:我不久前将上述代码作为jupyter-helpers的一部分发布。使用此软件包,只需在导入笔记本中导入导入导入程序:

from jupyter_helpers.selective_import import notebooks_importer 

cell magic可以通过以下方式导入到导入的笔记本中:

from jupyter_helpers.selective_import import skip_on_import

下面是导入的笔记本示例:Data.ipynb和导入笔记本的示例:Results.ipynb

相关问题 更多 >