如何将文本文件 (.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
-a
追加)。另一个别名:%%file myfile.py
运行
%run myfile.py
加载/导入
%load 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 笔记本单元格中?的主要内容,如果未能解决你的问题,请参考以下文章