【问题标题】:Share data between IPython Notebooks在 IPython Notebooks 之间共享数据
【发布时间】:2015-10-15 18:26:59
【问题描述】:

如果我在同一台服务器上运行多个 IPython 笔记本。有没有办法在他们之间共享数据?例如,从另一个笔记本导入变量?谢谢!

【问题讨论】:

  • 每个notebook运行的代码都是自己的进程,不能共享变量。您需要以某种形式对它们进行序列化,以便在笔记本之间传输它们。执行此操作的最佳方式取决于您的数据,但 CSV 或 JSON 是两种流行的格式。 'Pickle' 可以保存大多数 Python 变量,但如果您还想归档数据,则不建议这样做,因为这取决于您使用的特定 Python 版本。
  • 这个设施听起来和我想做的很相似。我想在内核重置之间保留一些“持久”的数据。我怀疑将数据 JSON 输出到一个文件并在笔记本的开头重新读取它是最简单的。

标签: python ipython ipython-notebook ipython-magic


【解决方案1】:

我相信理论上你应该能够使用messaging 做到这一点,尽管我必须深入挖掘才能弄清楚。

你为什么需要这种能力?

【讨论】:

  • 消息传递看起来可能会起作用。本质上,我正在为一群人建立一个服务器,以使用我正在编写的包进行一些数据分析。每个笔记本都在进行特定的分析,并且可能会很长并且很复杂。有时,一些数据需要在笔记本之间共享,并且无法真正预测需要共享哪些数据。这有意义吗?
【解决方案2】:

如果您的数据位于单个变量中,请尝试在一个笔记本中使用 %save 魔法将其保存到文件中,然后在另一个笔记本中读取。

一个困难是文本文件将包含数据但没有变量定义,因此我通常将其与变量定义相结合,然后exec 结果。

【讨论】:

  • 绝对是一个可能的解决方案。有没有办法在不使用我想要的变量修改笔记本的情况下做到这一点?所以本质上使一个笔记本的变量范围与另一个相同——让笔记本 1 访问笔记本 2 的变量,而根本不修改笔记本 2?
  • 这不会“共享数据”,而是将以前的 IPython 输入写入文本文件。 blue-sky 的 %store 解决方案确实在笔记本(和会话)之间保存和读取数据。
【解决方案3】:

这对我有用:

%store 命令允许您在两个不同的 笔记本。

data = '这是我要传递给不同笔记本的字符串' %存储数据

现在,在一个新的笔记本中…… %store -r data print(data) 这是字符串 我想传递给不同的笔记本

我已经成功测试了 sklearn 数据集:

from sklearn import datasets

dataset = datasets.load_iris()

%store dataset

在笔记本中读取数据:

%store -r dataset

源代码:https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcuts/

【讨论】:

  • 与其他一些功能相关但人们可能会觉得很方便,IPython data-vault 被描述为“用于简单、有组织、压缩和加密的 IPython 魔法:在笔记本之间存储和传输文件。”
【解决方案4】:

IPython 支持 %store 魔法 (here is the documentation)。似乎和pickle有同样的限制:如果文件可以腌制,它也可以存储。

无论如何,它肯定适用于常见的 Python 类型。这是一个基本示例:

var_1 = [1,2,3,4] #list
var_2 = {'a':1,'b':2,'c':3} #dict
var_3 = (6,7,8) #tuple
var_4 = {'d','e','f'} #set
%store var_1
%store var_2
%store var_3
%store var_4
 Stored 'var_1' (list)
 Stored 'var_2' (dict)
 Stored 'var_3' (tuple)
 Stored 'var_4' (set)

然后在不同的 IPython 笔记本上键入就足够了:

%store -r var_1 
%store -r var_2 
%store -r var_3 
%store -r var_4

【讨论】:

  • 知道如何抑制 %store 'var1' (list) 消息的发生吗?
  • @BillyJo_rambler 您可以使用%%capture cell magic 来做到这一点:只需将其添加到单元格顶部,它就会禁止显示消息。
【解决方案5】:

Jupyter Lab 中的笔记本可以共享同一个内核。在您的笔记本中,您可以选择另一个笔记本的内核,另一个笔记本中的变量将在两个笔记本中可用。

  1. 单击描述当前内核的按钮。
  2. 选择要访问其变量的其他笔记本的内核。

【讨论】:

    猜你喜欢
    • 2017-01-11
    • 2019-07-02
    • 2011-01-13
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 2018-03-25
    相关资源
    最近更新 更多