【问题标题】:How to save the output of a cell in iPython notebook如何在 iPython 笔记本中保存单元格的输出
【发布时间】:2015-03-15 15:48:27
【问题描述】:

我希望能够将 iPython 笔记本 cell 的 TEXT 输出保存到磁盘上的文件中。

我有 2 个额外的要求/要求:

  • 能够重新运行单元格并用最新的内容覆盖我的输出。
  • 还在笔记本中显示输出。

我已经想出了如何使用%%capture 魔法将 iPython 笔记本的单元格基本保存到文件中,但它似乎不够灵活:每次我重新运行单元格时它都会不断追加,我不能让它显示在同一个单元格中。

这是我目前所拥有的:

%%capture cap --no-stderr
print 'stuff'
with open('output.txt', 'w') as f:
    f.write(cap.stdout)

# clear the cap by deleting the variable here?
# del cap 

当我尝试在写入后输入cap.show() 时,它似乎没有显示。相反,它将输出两次放入 cap 变量中。

【问题讨论】:

  • 您想要 all 文本输出还是只需要 print 语句创建的文本输出?由于 IPython 显示机制,所有对象都有文本表示,因此笔记本中的文本比最初可见的要多。
  • 如果您只是在打印语句之后,请查看this question的答案
  • 这可能对保存特定单元格有用:datascience.stackexchange.com/questions/13669/…

标签: jupyter-notebook ipython ipython-magic


【解决方案1】:

您有一个错字,cap.stout 中缺少 d。应该是cap.stdout 我测试了以下内容,效果很好。 cap.show() 还打印了“stuff”并重新运行单元格覆盖了文件。

%%capture cap --no-stderr
print 'stuff'
with open('output.txt', 'w') as f:
    f.write(cap.stdout)

【讨论】:

  • 也就是说,问题不在于覆盖文件(使用 'w' 打开会清除文件)。问题是 cap 变量在运行之间没有被清除。
  • 在不同的单元格中运行cap.show() 不会写入文件。
  • 每次我第一次运行这个命令时,都会报错name cap doesn't exist。我第二次运行它,它执行得很好。
  • 我认为在单元格执行完毕之前您无法访问cap
  • 确实,with open('output.txt', 'w') as f: f.write(cap.stdout)必须在另一个单元格中。
【解决方案2】:
%%capture cap --no-stderr
print("a")
with open('output.txt', 'w') as f:
    f.write(str(cap))

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
  • 这没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review
  • @AtishAgrawal:是什么让你这么说?这对我来说当然是一个答案。是的,正如 Jeroen 指出的那样,它的解释很简单,但它仍然是一个答案。
  • @JeremyCaney 如果你仔细看,Amit Verma 的以下回答,他在这个人之前就已经回答好了。这个人似乎是答案的普通旧副本,已被投票 30 次。您不认为上述答案的核心动机是获得SO经验吗?考虑一下。此外,在 SO 上粘贴代码 sn-p 从来都不是一个好的回答策略。您必须在代码片段中包含一些解释。 (这又由 Amit Verma 完成)。新用户应该在 SO 学习 QnA 的最佳实践。
  • @AtishAgrawal:首先,如果你真的仔细观察,你会发现它实际上并不是重复的代码;他们在没有致电stdout 的情况下确定了不同的提案。其次,虽然纯代码答案肯定不鼓励they’re not subject to removal。此处的适当操作是对答案投反对票。这就是当用户真诚地尝试回答但没有提供足够详细或有用的贡献时,我们鼓励遵循最佳实践的方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-09
  • 2016-02-04
  • 2015-03-20
  • 1970-01-01
  • 2019-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多