que programar notebook espaƱol entrar ejecutar curso como comandos codigo python ipython ipython-notebook

programar - Leer el contenido de la celda en un cuaderno ipython



manual de python en jupyter notebook (1)

Creo que estás tratando de atacar el problema de manera incorrecta.

Primero, sí, es posible obtener la celda de reducción de datos adyacente de una manera realmente imprecisa que no funcionaría en la ejecución de un portátil sin cabeza.

Lo que quiere hacer es usar la magia de celda IPython, que permite una sintaxis arbitraria siempre que la celda comience con signos de 2 por ciento seguidos de un identificador.

Típicamente quieres celdas SQL.

Puede consultar la documentación sobre celdas mágicas o puedo mostrarle cómo crear eso:

from IPython.core.magic import ( Magics, magics_class, cell_magic, line_magic ) @magics_class class StoreSQL(Magics): def __init__(self, shell=None, **kwargs): super().__init__(shell=shell, **kwargs) self._store = [] # inject our store in user availlable namespace under __mystore # name shell.user_ns[''__mystore''] = self._store @cell_magic def sql(self, line, cell): """store the cell in the store""" self._store.append(cell) @line_magic def showsql(self, line): """show all recorded statements""" print(self._store) ## use ipython load_ext mechanisme here if distributed get_ipython().register_magics(StoreSQL)

Ahora puedes usar la sintaxis SQL en tus celdas de python:

%%sql select * from foo Where QUX Bar

una segunda celda:

%%sql Insert Cheezburger into Can_I_HAZ

verifique lo que ejecutamos (los 3 guiones muestran la delimitación de entrada / salida, no tiene que escribirlos):

%showsql --- [''select * from foo Where QUX Bar'', ''Insert Cheezburger into Can_I_HAZ'']

Y lo que preguntaste al principio en tu pregunta:

mysql.query(__mystore[-1])

Por supuesto, esto requiere que ejecute las celdas anteriores en el orden correcto, nada le impide usar la sintaxis %%sql para nombrar sus celdas, por ejemplo, si _store es un dict , o mejor una clase en la que sobrescribe __getattr__ , para actuar como __getitem__ para acceder a los campos con sintaxis de puntos. Esto se deja como un ejercicio para el lector, o fin de la respuesta:

@cell_magic def sql(self, line, cell): """store the cell in the store""" self._store[line.strip()] = cell

entonces puedes usar sql cell como

%%sql A1 set foo TO Bar where ID=9

Y luego en tus celdas de Python.

mysql.execute(__mystore.A1)

También sugeriría encarecidamente consultar a Catherine Develin SqlMagic para IPython , y este cuaderno en GitHub que muestra todo esto en vivo.

En el comentario que pareces decir que quieres agregar pig , nada te impide tener un %%pig magia de %%pig . También es posible inyectar Javascript para habilitar el resaltado de sintaxis correcto de SQL y PIG, pero eso está fuera del alcance de esta pregunta.

Tengo un ipython notas ipython con celdas mezcladas de python y markdown .

Y me gustaría que algunas de mis celdas de python lean las celdas de markdown adyacentes y las procesen como entrada.

Un ejemplo de la situación deseada:

CELL 1 (markdown) : Código SQL para ejecutar

CELULA 2 (reducción) : select * from tbl where x=1

CELL 3 (python) : mysql.query(ipython.previous_cell.content)

(La sintaxis ipython.previous_cell.content está compuesta)

La ejecución de " CELL 3 " debería ser equivalente a mysql.query("select * from tbl where x=1")

¿Cómo se puede hacer esto?