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?
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.
You can also hit Ctrl-D to exit out of ipython. In fact, using your keyboard is the most highly recommended way.
You can save your IPython session to a file with the %save command.
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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With