Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Copy from IPython session without terminal prompts

Frequently, my workflow involves data cleaning/munging in an IPython shell. This has become particularly wonderful since IPython version 5.0 with all the great upgrades to the terminal interface. So, let's say I make an attempt at sprucing up some piece of unstructured data:

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)     ...: 

Fantastic, it works! But now, I would really like to add this to a script in my editor. If I copy and paste from my terminal, I capture all the junk on the left. I can clean this up more-or-less easily in an editor, but it would be great if I could copy the code directly to my clipboard from the terminal without touching the mouse and without grabbing the extra stuff either. Is there such a functionality in IPython?

like image 930
juanpa.arrivillaga Avatar asked Dec 09 '16 23:12

juanpa.arrivillaga


People also ask

How do I use IPython in command prompt?

Install IPython The easiest way is to run easy_install ipython[all] as an administrator (start button, type cmd , shift+right click on “cmd.exe” and select “Run as administrator”). This installs the latest stable version of IPython including the main required and optional dependencies.

How do I leave IPython terminal?

You can also hit Ctrl-D to exit out of ipython. In fact, using your keyboard is the most highly recommended way.

How do you save codes on IPython?

You can save your IPython session to a file with the %save command.


1 Answers

You can use the %history magic to extract the interesting parts from your session. They will be shown in terminal without any of the junk.

Example

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 

If I want to save a part of the session above I can use:

In [5]: %history 1 3-4  import numpy as np a = np.random.random(10) for i in a:     print(i) 

In the example above I used %history 1 3-4 to assemble all the commands I want to keep and omit the ones I do not need (Line 2, the one with the error). Now you have version of your session that can be nicely copied.

Writing a file

You can also directly write this to file using the -f FILENAME as parameter.

In [8]: %history 1 3-4 -f /tmp/foo.py 

Be careful though, this will overwrite existing files. More Details can be found in the documentation of the %history magic.

like image 157
m00am Avatar answered Sep 21 '22 18:09

m00am