如何在iPython笔记本中保存单元格的输出?

如何在iPython笔记本中保存单元格的输出?,ipython,ipython-notebook,ipython-magic,Ipython,Ipython Notebook,Ipython Magic,我希望能够将iPython笔记本单元的文本输出保存到磁盘上的文件中 我还有两个额外的要求: 能够重新运行单元格并用最新的内容覆盖我的输出 同时在笔记本中显示输出 我已经知道如何使用%%capture魔术将iPython笔记本的单元格基本保存到文件中,但它似乎不够灵活:每次我重新运行单元格时,它都会不断追加,而我无法让它显示在同一单元格中 以下是我到目前为止的情况: %%capture cap --no-stderr print 'stuff' with open('output.txt',

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

我还有两个额外的要求:

  • 能够重新运行单元格并用最新的内容覆盖我的输出
  • 同时在笔记本中显示输出
我已经知道如何使用
%%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变量两次。

您有一个输入错误,在
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不存在
。我第二次运行它时,它执行得很好。我想在单元格完成执行之前,您无法访问
cap
,而带有open('output.txt',w')作为f:f.write(cap.stdout)的
必须在另一个单元格中。您希望所有文本输出还是仅由print语句创建的文本输出?由于IPython显示机制,所有对象都有文本表示,因此笔记本中的文本比最初可见的多。如果您刚刚完成打印语句,请查看此问题的答案,可能有助于保存特定单元格:虽然此代码可能会回答此问题,提供关于解决问题的方式和/或原因的附加上下文将提高答案的长期价值。这并不能提供问题的答案。一旦你有足够的钱,你将能够;相反@阿提沙格劳尔:你为什么这么说?对我来说,这当然是一个答案。是的,正如杰罗恩所说,这很容易解释,但这仍然是一个答案。@JeremyCaney如果你仔细看,下面是阿米特·维尔玛的答案,他早在这个人之前就回答了。这个人似乎是答案的一个简单的老版本,这个答案已经被提升了30次。你不认为上述答案的核心动机是为了获得经验吗?想一想。此外,粘贴代码片段从来都不是一个好的回答策略。您必须在代码块中包含一些解释。(这又由阿米特·维尔马完成)。新用户应该在SO学习QnA的最佳实践。@AtishAgrawal:首先,如果你仔细观察,你会发现它实际上不是重复的代码;他们没有调用
stdout
就确定了一个不同的提案。第二,虽然不鼓励只使用代码的答案。这里适当的行动是否决答案。这就是当用户真诚地尝试回答问题,但没有提供足够详细或有用的信息时,我们如何激励用户遵循最佳实践。
%%capture cap --no-stderr
print("a")
with open('output.txt', 'w') as f:
    f.write(str(cap))