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


232

我最近已将使用IPython笔记本作为工作流程的一部分。但是,我没有成功找到一种方法来将.py文件导入打开的IPython Notebook的各个单元中,以便可以对其进行编辑,运行和保存。能做到吗?

我在文档中找到了这一点,该文档告诉我如何将.py文件作为新笔记本导入,但是这与我想要实现的目标不符。

任何建议将不胜感激。


6
好问题。我还没有看到一个真正令人满意的答案。通过互联网服务IPython笔记本时,这一点尤其重要。如果人们想查看/编辑导入的函数的源代码(带有语法高亮显示等),那么目前尚无简便的方法。应该可以只打开py文件而无需将其转换为ipynb文件。
彼得

Answers:


306

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

可以使用magic命令将文本文件加载到笔记本单元中%load

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

%load filename.py

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

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

要查看任何魔术命令的帮助,请添加?:like %load?%%writefile?

有关魔术功能的常规帮助,请键入“%magic”。有关可用魔术功能的列表,请使用%lsmagic。对于其中任何一个的描述,请键入%magic_name ?,例如'%cd?'。

另请参见:官方IPython文档中的Magic函数


3
%save -f似乎是完成我一直在寻找的方法。谢谢!
aaronsstack 2014年

2
save -f是一种间接保存到文件中的方法,只有先执行单元格然后提供正确的引用,该方法才能起作用。通常%%writefile,将当前单元格写入文件更容易使用。我更新了答案以提及这一点。
2014年

4
当前是新的magic命令%loadpy(而不是%load)。
AlQuemist

1
根据ipython.org/ipython-doc/3/interactive/magics.html的说法,使用%load还不错,请继续:“ %loadpyAlias of %load)- %loadpy已经获得了一定的灵活性,并且放弃了.py扩展名的要求。因此已将其重命名为%load您可以查看%load文档字符串以获取更多信息。”
迈克尔

118

写入/保存

%%writefile myfile.py

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

跑步

%run myfile.py

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

加载/导入

%load myfile.py

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

寻求更多的魔术和帮助

%lsmagic

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

%COMMAND-NAME?

  • 获取有关如何使用特定命令的帮助。即%run?

注意

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

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

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

另外,请参阅此nbviewer以获取有关示例的进一步说明。希望这可以帮助。


1
谢谢,我使用Windows并尝试了!dir,输出!dir Volume in drive D is Documents等...所以它不仅是bash,而且是cmd!
brian

1
@iamaziz我想你的意思是!python --version(错别字)
Alexandre

5
阿齐兹,这是一个很好的答案。一个小提醒:这是非常略有不同的使用%run myfile.py,而不是!python myfile.py。如果执行前者,它将使用ipython内核执行,包括配置的任何预加载。一个小问题,但今天我遇到了一个错误,对我来说很重要。
特里斯坦·里德

如果要%run myfile.py在脚本中包含IPython单元魔术命令时执行与该答案中所述相同的操作,请使用%run myfile.ipy
韦恩

8

将一个Python文件拖放到Ipython笔记本的“ home”笔记本表中,单击“上传”。这将创建一个只有一个包含.py文件内容的单元格的新笔记本

从您喜欢的编辑器中进行其他复制/粘贴;)


1
感谢您的答复,但是正如我在帖子正文中提到的那样,我希望避免每次都创建一个新笔记本,而是在现有笔记本的单元格中维护.py脚本。
aaronsstack 2014年

如果我错了,请修复我:您不会使用笔记本作为文本编辑器吗?(我的意思是:单元格中的每个修改都不会更改.py文件)。顺便说一句,我没有的插入在单元格中内容的.py原生的方式线索,我总是复制/粘贴我的代码的时候需要...对不起
拉斐尔布劳德

5

我发现在ipython笔记本中使用ls和cd查找文件是令人满意的。然后,在单元格中键入cat your_file_name,您将获得文件的内容,然后可以将其作为代码粘贴到单元格中。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.