jua*_*aga 63 python copying ipython
通常,我的工作流程涉及在IPython shell中进行数据清理/修改.自从IPython 5.0版本以及终端界面的所有重大升级以来,这已经变得特别精彩.所以,假设我试图修改一些非结构化数据:
In [11]: for i, (num, header, txt) in enumerate(data):
...: header = [e.strip() for e in header.strip().split('\n')]
...: header[4] = header[4].strip(',').split(',')
...: data[i] = (num, header, txt)
...:
Run Code Online (Sandbox Code Playgroud)
太棒了,它有效!但现在,我真的想在编辑器中将其添加到脚本中.如果我从终端复制并粘贴,我会捕获左边的所有垃圾.我可以在编辑器中轻松地清理它,但如果我可以直接将代码从终端直接复制到我的剪贴板而不触摸鼠标而且不需要抓取额外的东西,这将是很棒的.在IPython中有这样的功能吗?
m00*_*0am 75
您可以使用%history魔法从会话中提取有趣的部分.它们将在没有任何垃圾的终端中显示.
In [1]: import numpy as np
In [2]: a = np.random(10)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-83ce219ad17b> in <module>()
----> 1 a = np.random(10)
TypeError: 'module' object is not callable
In [3]: a = np.random.random(10)
In [4]: for i in a:
...: print(i)
...:
0.688626523886
[...]
0.341394850998
Run Code Online (Sandbox Code Playgroud)
如果我想保存上面会话的一部分,我可以使用:
In [5]: %history 1 3-4
import numpy as np
a = np.random.random(10)
for i in a:
print(i)
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我曾经%history 1 3-4组装了我想要保留的所有命令,并省略了我不需要的命令(第2行,有错误的命令).现在您的会话版本可以很好地复制.
您也可以使用-f FILENAMEas参数直接将其写入文件.
In [8]: %history 1 3-4 -f /tmp/foo.py
Run Code Online (Sandbox Code Playgroud)
但要小心,这将覆盖现有文件.更多细节可以在%history魔术文档中找到.
jua*_*aga 14
所以,我终于找到了一个很棒的解决方案,基本上就是我想要的:在IPython中使用Vi模式.在版本5上,这需要:
$ ipython --TerminalInteractiveShell.editing_mode=vi
Run Code Online (Sandbox Code Playgroud)
现在我可以使用方便的vi视觉模式,并随意抽出任何东西!
这导致我的.bash_profile/.bash_rc中出现以下新别名:
alias vpython='ipython --TerminalInteractiveShell.editing_mode=vi'
Run Code Online (Sandbox Code Playgroud)
Céd*_*pay 10
该save魔术命令[ 文件 ],保存你要到一个文件中输入线; 该-a选项用于"追加"模式,以便在文件末尾添加行而不是覆盖文件.我用它所有的时间.
用你的例子:
%save -a myfile.py 11
# the '%' is not necessary
save -a myfile.py 11
Run Code Online (Sandbox Code Playgroud)
然后你可以在IPython中继续编码.
当你想要写入同一个文件的另一个命令时,你可以输入save然后使用向上箭头返回最后一次使用"保存"(这样-a选项和文件名已经存在)并只需编辑该行数.
请注意,您可以提供多行保存以及行范围:
save -a myfile.py 15 18 19-25
Run Code Online (Sandbox Code Playgroud)