online notebook jupiter instalar desde compiler como python ipython

notebook - Buscar en el historial de ipython



jupyter desde anaconda (7)

ipython %his ipython genera comandos recientes ingresados ​​por el usuario. ¿Es posible buscar dentro de estos comandos? Algo como esto:

[c for c in %history if c.startswith(''plot'')]

EDITAR No estoy buscando una forma de volver a ejecutar un comando, sino de localizarlo en la lista de historial. Por supuesto, a veces querré volver a ejecutar un comando después de localizarlo, ya sea textualmente o con modificaciones.

EDITAR la búsqueda con ctr-r y luego escribir plot da el comando más reciente que comienza con "plot". No listará todos los comandos que comiencen con él. Tampoco puedes buscar en el medio o al final de los comandos

Solución

Ampliando la solución de PreludeAndFugue aquí, lo que estaba buscando:

[l for l in _ih if l.startswith(''plot'')]

Aquí, la condición if puede ser sustituida por una expresión regular.


Aún mejor: %hist -g |pattern| codicia su historia pasada para |pattern| . Además, puede restringir su búsqueda a la sesión actual o a un rango particular de líneas. Ver %hist?

Así que para la pregunta de @BorisGorelik tendrías que hacer

%hist -g plot

Desafortunadamente no puedes hacer

%hist -g ^plot

ni

%hist -g "^plot"


Al igual que en la primera respuesta puedes hacer lo siguiente:

''''.join(_ih).split(''/n'')

Sin embargo, al recorrer los elementos del historial de comandos, puede hacer lo siguiente. De esta forma puedes crear tu lista de comprensión a partir de esto.

for item in _ih: print item

Esto se documenta en la siguiente sección de la documentación: http://ipython.org/ipython-doc/dev/interactive/reference.html#input-caching-system


Generalmente me encuentro con ganas de buscar en todo el historial de ipython en todas las sesiones anteriores y actuales. Para esto yo uso:

from IPython.core.history import HistoryAccessor hista = HistoryAccessor() z1 = hista.search(''*numpy*corr*'') z1.fetchall()

O (no ejecute ambos o dañará / borrará su historial)

ip = get_ipython() sqlite_cursor = ip.history_manager.search(''*numpy*corr*'') sqlite_cursor.fetchall()

La cadena de búsqueda no es una expresión regular. IPython history_manager usa la sintaxis de búsqueda glob * sqlite.


Hay una forma de hacerlo:

''''.join(_ip.IP.shell.input_hist).split(''/n'')

o

''''.join(_ip.IP.shell.input_hist_raw).split(''/n'')

para evitar la expansión de magia.


Si desea volver a ejecutar un comando en su historial, pruebe Ctrl-r y luego su cadena de búsqueda.


from IPython.core.history import HistoryAccessor def search_hist(pattern, print_matches=True, return_matches=True, wildcard=True): if wildcard: pattern = ''*'' + pattern + ''*'' matches = HistoryAccessor().search(pattern).fetchall() if not print_matches: return matches for i in matches: print(''#'' * 60) print(i[-1]) if return_matches: return matches


%history [-n] [-o] [-p] [-t] [-f FILENAME] [-g [PATTERN [PATTERN ...]]] [-l [LIMIT]] [-u] [range [range ...]]

....

-g <[PATTERN [PATTERN …]]> treat the arg as a glob pattern to search for in (full) history. This includes the saved history (almost all commands ever written). The pattern may contain ‘?’ to match one unknown character and ‘*’ to match any number of unknown characters. Use ‘%hist -g’ to show full saved history (may be very long).

Ejemplo (en mi historia):

In [23]: hist -g cliente*aza 655/58: cliente.test.alguna.update({"orden" : 1, "nuevo" : "azafran"}) 655/59: cliente.test.alguna.update({"orden" : 1} , {$set : "nuevo" : "azafran"}) 655/60: cliente.test.alguna.update({"orden" : 1} , {$set : {"nuevo" : "azafran"}})

Ejemplo (en mi historia):

In [24]: hist -g ?lie*aza 655/58: cliente.test.alguna.update({"orden" : 1, "nuevo" : "azafran"}) 655/59: cliente.test.alguna.update({"orden" : 1} , {$set : "nuevo" : "azafran"}) 655/60: cliente.test.alguna.update({"orden" : 1} , {$set : {"nuevo" : "azafran"}})