我最近开始使用ipython笔记本作为我工作流程的一部分。但是,我没有成功地找到一种方法将.py文件导入到打开的ipython笔记本的单个单元格中,以便编辑、运行和保存它们。能做到吗?
我在文档中发现了这一点,它告诉我如何将.py文件作为新笔记本导入,但这与我想要实现的目标不符。
任何建议都会非常感谢。
好问题。我还没有看到一个真正令人满意的答案。在互联网上为ipython笔记本电脑提供服务时,这一点尤为重要。如果人们想查看/编辑导入的函数的源代码(使用语法突出显示等),目前没有简单的方法可以做到这一点。应该可以只打开py文件而不将其转换为ipynb文件。
EDIT: Starting from IPython 3 (now Jupyter project), the notebook has a text editor that can be used as a more convenient alternative to
load/edit/save text files.
文本文件可以通过magic命令%load加载到笔记本电脑单元中。
如果执行的单元格包含:
1%load filename.py
EDOCX1[1]的内容将加载到下一个单元格中。您可以像往常一样编辑和执行它。
要将单元内容保存回文件中,请在单元的开头添加Cell Magic %%writefile filename.py,然后运行它。请注意,如果已经存在同名文件,它将被静默覆盖。
为了获得任何魔法命令的帮助,添加一个?:比如%load?或%%writefile?。
有关magic函数的常规帮助,请键入"%magic"有关可用magic函数的列表,请使用%lsmagic。描述其中任何一个,键入%magicu name?例如"%CD?".
另请参见:来自官方ipython文档的魔力函数。
这,加上EDOCX1[1]似乎是我所寻找的方法。谢谢!
save -f是一种间接保存到文件中的方法,只有先执行单元,然后提供正确的引用,它才能工作。一般来说,使用%%writefile将当前单元格写入文件更容易。我更新了答案来提到这个。
新的魔法命令现在是%loadpy,而不是%load。
根据ipython.org/ipython-doc/3/interactive/magics.html使用%load是很好的,继续说:"%loadpy(%load的别名)--%loadpy已经获得了一些灵活性,并且放弃了.py扩展的要求。因此,它被简单地重新命名为%load。您可以查看%loaddocstring了解更多信息。"
写/保存
%%writefile myfile.py
将单元内容写入/保存到myfile.py中(使用-a追加)。另一个别名:%%file myfile.py。
运行
%run myfile.py
运行myfile.py并在当前单元格中输出结果
加载/导入
%load myfile.py
将"import"myfile.py加载到当前单元格中
更多的魔法和帮助
%lsmagic
列出所有其他酷的细胞魔术命令。
%COMMAND-NAME?
有关如何使用某个命令的帮助。即%run?。
注释
除了cell magic命令外,ipython notebook(现在的jupyter notebook)非常酷,它允许您直接从cell使用任何unix命令(这也相当于使用%%bashcell magic命令)。
要从单元运行unix命令,只需在命令前面加上!标记。例如:
!python --version查看您的python版本
!python myfile.py运行myfile.py,输出结果在当前单元格中,就像%run一样(见下面注释中!python和%run的区别)。
此外,请参阅此nbviewer以获取更多示例解释。希望这有帮助。
谢谢,我用窗户试过了!dir、output !dir Volume in drive D is Documents等…所以不仅仅是bash,还有cmd!
@伊玛兹,我想你是说!python --version(打字错误)
阿齐兹,这是个很好的答案。一个小提示:与使用!python myfile.py相比,使用%run myfile.py略有不同。如果执行前者,它将使用ipython内核执行,包括配置的任何预加载。一个小问题,但我今天遇到了一个错误,它对我产生了影响。
将python文件拖放到ipython笔记本的"home"笔记本表中,单击"上载"。这将创建一个新的笔记本,其中只有一个单元格包含.py文件内容
或者从您最喜爱的编辑器中复制/粘贴;)
感谢您的回复,但正如我在文章正文中提到的,我希望避免每次都创建一个新的笔记本,而是在现有笔记本的单元格中维护.py脚本。
如果我错了,请纠正我:你不会用笔记本作为文本编辑器吗?(我的意思是:单元格中的每个修改都不会更改.py文件)。顺便说一下,我不知道如何在单元格中插入.py内容,我总是在需要时复制/粘贴代码…对不起的
我发现在ipython笔记本中使用ls和cd查找文件是令人满意的。然后在单元格中键入cat您的文件名,您将得到文件的内容,然后可以将其作为代码粘贴到单元格中。
!cat"file.txt"