tutorial notebook nbviewer instalar examples como python ipython copying

notebook - Cómo copiar desde una sesión de IPython sin indicaciones del terminal



nbviewer (5)

El comando save magia [ documentation ] guarda las líneas de entrada que desea en un archivo; la opción -a es para el modo "agregar" para que las líneas se agreguen al final del archivo en lugar de sobrescribir el archivo. Lo uso todo el tiempo.

Con tu ejemplo:

%save -a myfile.py 11 # the ''%'' is not necessary save -a myfile.py 11

Entonces puedes seguir codificando en IPython.

Cuando hay otro comando que desea escribir en el mismo archivo, puede escribir save luego usar la flecha hacia arriba para recuperar el último uso de "guardar" (para que la opción -a y el nombre de archivo ya estén allí) y simplemente Editar el número de línea.

Tenga en cuenta que puede dar varias líneas para guardar y también rangos de línea:

save -a myfile.py 15 18 19-25

Con frecuencia, mi flujo de trabajo implica la limpieza / munging de datos en un shell de IPython. Esto se ha vuelto particularmente maravilloso desde IPython versión 5.0 con todas las excelentes actualizaciones de la interfaz del terminal . Entonces, digamos que hago un intento de arreglar algunos datos no estructurados:

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

¡Fantástico, funciona! Pero ahora, realmente me gustaría agregar esto a un script en mi editor. Si copio y pego desde mi terminal, capturo toda la basura de la izquierda. Puedo limpiar esto más o menos fácilmente en un editor, pero sería genial si pudiera copiar el código directamente en mi portapapeles desde la terminal sin tocar el mouse y sin agarrar las cosas adicionales. ¿Existe tal funcionalidad en IPython?


En el shell, primero puede convertir el archivo IPython a un archivo Python normal (.py) y luego hacer la limpieza:

http://ipython.org/ipython-doc/3/notebook/nbconvert.html (ver --to formato de script)

También puede descargar el archivo en el editor del cuaderno como archivo Python y realizar la limpieza después de este paso.


Entonces, finalmente encontré una gran solución que es esencialmente exactamente lo que quería: usar el modo Vi en IPython. En la versión 5, esto requiere:

$ ipython --TerminalInteractiveShell.editing_mode=vi

¡Ahora puedo usar el práctico modo visual tipo vi y tirar de lo que necesito!

Lo que lleva al siguiente nuevo alias en mi .bash_profile / .bash_rc:

alias vpython=''ipython --TerminalInteractiveShell.editing_mode=vi''


No creo que las aplicaciones de terminal realmente tengan acceso al búfer de copiar / pegar. Tendrás que usar el mouse. Cómo hacerlo depende de qué terminal estés usando. La mayoría de las terminales modernas tienen algún tipo de modo "selección rectangular" o "selección de bloque".

Con Windows, la selección rectangular es el valor predeterminado para cmd.exe y Powershell. Si está utilizando el mintty de Cygwin, mantenga presionada la tecla Alt y luego seleccione la región con el mouse. Lo mismo ocurre con PuTTY.

En Linux (que no tengo frente a mí, tómalo con un grano de sal), xterm no lo admite, Gnome Terminal usa Ctrl como modificador y Konsole de KDE usa Ctrl + Alt .

Para OS X Terminal, Internet me dice que use mientras hace clic.

Es probable que otros terminales (y la pantalla GNU) tengan la función, solo es cuestión de descubrir cómo activarla.


Puede usar la magia %history para extraer las partes interesantes de su sesión. Se mostrarán en la terminal sin nada de basura.

Ejemplo

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

Si quiero guardar una parte de la sesión anterior, puedo usar:

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

En el ejemplo anterior, utilicé %history 1 3-4 para ensamblar todos los comandos que quiero mantener y omitir los que no necesito (Línea 2, la que tiene el error). Ahora tiene una versión de su sesión que se puede copiar muy bien.

Escribiendo un archivo

También puede escribir esto directamente en el archivo usando -f FILENAME como parámetro.

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

Sin embargo, tenga cuidado, esto sobrescribirá los archivos existentes . Se pueden encontrar más detalles en la documentación de %history magic .