如何将文本文件(.py)加载/编辑/运行/保存到IPython笔记本单元格中?

271

最近,我开始在工作流程中使用IPython笔记本。然而,我一直没有成功地找到一种方法来将.py文件导入到打开的IPython笔记本的各个单元格中,以便可以编辑、运行和保存它们。这能做到吗?

我在文档中找到了这个,它告诉我如何将.py文件导入为新的笔记本,但这还不够我想要实现的。

如果有任何建议,将不胜感激。


6
好问题。我还没有看到一个令人满意的答案。特别是当通过互联网提供IPython笔记本时,这一点尤为重要。如果人们想要查看/编辑已导入的函数的源代码(带有语法突出显示等),目前没有简单的方法。应该可以直接打开py文件而不是将它们转换为ipynb文件。 - Peter
6个回答

354

编辑:从IPython 3(现在是Jupyter项目)开始,笔记本具有文本编辑器,可用作加载/编辑/保存文本文件的更方便的替代方法。

可以使用魔法命令%load在笔记本单元格中加载文本文件。

如果您执行包含以下内容的单元格:

%load filename.py

filename.py的内容将在下一个单元格中加载,您可以像平常一样编辑和执行它。

要将单元格内容保存回文件,请在单元格开头添加单元格魔法%%writefile filename.py并运行它。请注意,如果已经存在同名文件,它将被静默覆盖

要查看任何魔法命令的帮助,请添加?,例如%load?%%writefile?

有关魔法函数的通用帮助,请键入“%magic” 要获取可用魔法函数列表,请使用%lsmagic。要获取其中任何一个的描述,请键入%m(魔法名称)?例如'%cd?'。

另请参阅:来自官方IPython文档的魔法函数


3
这个加上 %save -f 似乎是我正在寻找的方法。谢谢! - aaronsstack
2
“save -f” 是一种间接保存到文件的方式,只有在您先执行单元格并提供正确的引用后才能起作用。通常更容易使用“%%writefile”将当前单元格写入文件。我更新了答案以提到这一点。 - user2304916
4
新的魔术命令是目前的 %loadpy(取代了 %load)。 - AlQuemist
1
根据 https://ipython.org/ipython-doc/3/interactive/magics.html,使用 %load 是可以的。 %loadpy%load 的别名)已经具有一些灵活性,并且不需要 .py 扩展名了。因此,它被重命名为 %load。您可以查看 %load docstring 以获取更多信息。 - michael
在启动ipython时,是否可以将%load myfile.py作为启动参数运行? - gies0r

147

写入/保存

%%writefile myfile.py

  • 将单元格内容写入/保存到myfile.py文件中(使用-a表示追加)。另一个别名:%%file myfile.py

运行

%run myfile.py

  • 运行myfile.py并在当前单元格中输出结果

加载/导入

%load myfile.py

  • 将“import”myfile.py加载到当前单元格中

更多魔术命令和帮助

%lsmagic

  • 列出所有其他酷炫的单元格魔术命令。

%COMMAND-NAME?

  • 获取有关如何使用某个命令的帮助。例如:%run?

注意

除了单元格魔术命令外,IPython笔记本(现在是Jupyter笔记本)非常酷,它允许您直接从单元格中使用任何Unix命令(这也等同于使用%%bash单元格魔术命令)。

要从单元格中运行Unix命令,只需在命令前加上!标记。例如:

  • !python --version查看您的Python版本
  • !python myfile.py运行myfile.py并在当前单元格中输出结果,就像%run一样(请参见下面的注释中!python%run之间的区别)。

此外,请参见此nbviewer以获取更多解释和示例。


5
Aziz,这是一个很好的回答。有个小提醒:使用%run myfile.py!python myfile.py略有不同。如果您使用前者,它将使用ipython内核执行,包括任何预加载配置。这是一个小问题,但我今天遇到了一个bug,这使得它对我产生了影响。 - Tristan Reid
如果您想在脚本中包含IPython单元格魔术命令并执行与此答案中描述的%run myfile.py相当的操作,请使用%run myfile.ipy - Wayne

9

将Python文件拖放到Ipython笔记本电脑的“主页”笔记本电脑表中,然后单击上传。这将创建一个新的笔记本电脑,其中仅包含一个单元格,其中包含您的.py文件内容

否则,从您喜欢的编辑器中复制/粘贴 ;)


5

我发现在ipython笔记本中使用ls和cd来查找文件非常有效。然后在单元格中键入cat your_file_name,您将获得该文件的内容,您可以将其作为代码复制到单元格中。


!cat "file.txt" - Enrique Pérez Herrero

0

要写入已存在或不存在的文件,请使用以下方法

%%writefile script2.py
print(4+5) 
print(5+5)

要追加到文件中,请使用-a参数

%%writefile -a script2.py
print("hello")

当你加载文件时

%load script2.py
print(4+5)
print(5+5
print("hello")

0

我还没有找到一个令人满意的答案来回答这个问题,即如何加载、编辑、运行和保存。如果你想在 git 中显示增量更改,使用 %%writefile%save -f 覆盖任何一个都不太好用。它看起来像你删除了 filename.py 中的所有行并添加了所有新行,即使你只是编辑了一行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接