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

Posted

技术标签:

【中文标题】如何将文本文件 (.py) 加载/编辑/运行/保存到 IPython 笔记本单元格中?【英文标题】:How to load/edit/run/save text files (.py) into an IPython notebook cell? 【发布时间】:2014-01-28 20:08:30 【问题描述】:

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

我在文档中找到了this,它告诉我如何将 .py 文件作为新笔记本导入,但这没有达到我想要实现的目标。

任何建议将不胜感激。

【问题讨论】:

好问题。我还没有看到一个真正令人满意的答案。在通过 Internet 提供 IPython notebook 时,这一点尤其重要。如果人们想查看/编辑导入的函数的源代码(带有语法高亮等),目前没有简单的方法可以做到。应该可以只打开 py 文件而不将它们转换为 ipynb 文件。 【参考方案1】:

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

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

如果您执行的单元格包含:

%load filename.py

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

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

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

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

另请参阅:来自官方 IPython 文档的Magic functions。

【讨论】:

这个,加上%save -f 似乎是我正在寻找的方法。谢谢! save -f 是一种间接保存到文件的方式,只有在您先执行单元格然后提供正确的引用时才会起作用。一般来说,使用%%writefile 将当前单元格写入文件更容易。我更新了答案以提及这一点。 新的魔法命令目前是%loadpy(而不是%load)。 根据ipython.org/ipython-doc/3/interactive/magics.html 使用%load 很好,继续前进:“%loadpy (别名 %load) -- %loadpy 获得了一些灵活性并放弃了.py 扩展的要求。因此它已简单地重命名为%load。您可以查看%load 文档字符串以获取更多信息。” 是否可以将%load myfile.py 作为ipython 的启动参数运行?【参考方案2】:

写入/保存

%%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 一样(请参阅下面 cmets 中 !python%run 之间的区别)。

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

【讨论】:

谢谢,我使用 windows 并尝试了 !dir,输出 !dir Volume in drive D is Documents 等...所以它不仅仅是 bash,还有 cmd! @iamaziz 我想你的意思是!python --version(错字) 阿齐兹,这是一个很好的答案。一个小提示:使用%run myfile.py!python myfile.py 略有不同。如果您执行前者,它将使用 ipython 内核执行,包括配置的任何预加载。一个小问题,但我今天遇到了一个错误,它对我产生了影响。 如果您想在脚本中包含 IPython 单元魔术命令的同时执行此答案中描述的 %run myfile.py 等效操作,请使用 %run myfile.ipy【参考方案3】:

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

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

【讨论】:

感谢您的回复,但正如我在帖子正文中提到的,我希望避免每次都创建新笔记本,而是在现有笔记本的单元格中维护 .py 脚本。 如果我错了,请纠正我:您不会将笔记本用作文本编辑器吗? (我的意思是:单元格中的每次修改都不会更改 .py 文件)。顺便说一句,我不知道在单元格中插入 .py 内容的本地方法,我总是在需要时复制/粘贴我的代码......抱歉【参考方案4】:

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

【讨论】:

!cat "file.txt"【参考方案5】:

我还没有为这个问题找到满意的答案,即如何加载编辑、运行和保存。如果您想在 git 中显示增量更改,使用 %%writefile%save -f 覆盖都不能很好地工作。看起来您删除了 filename.py 中的所有行并添加了所有新行,即使您只编辑了 1 行。

【讨论】:

【参考方案6】:

写入一个存在或不存在的文件使用以下

%%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")

【讨论】:

以上是关于如何将文本文件 (.py) 加载/编辑/运行/保存到 IPython 笔记本单元格中?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Ace 编辑器中的所有文本保存在 WT 中?

如何将变量保存到新的文本文件中,以便下次程序运行时加载这些变量?

如何创建一个py文件

如何将实例保存在编辑文本中?

如何将 RichTextBox 文本保存到文本资源文件?

字符编码