notebook - Determine todos los archivos leídos y escritos desde un cuaderno ipython
jupyter r (1)
Puede verificar qué archivos ha abierto o modificado parcheando el builtin open
como sugirió JRG y debe extender esta funcionalidad para aplicar parches a cualquier función que use para conectarse a los sitios web si desea hacer un seguimiento de eso también.
import builtins
modified = {}
old_open = builtins.open
def new_open(name, mode=''r'', *args, **kwargs):
modified[name] = mode
return old_open(name, mode=mode, *args, **kwargs)
# patch builtin open
builtins.open = new_open
# check modified
def whats_modified():
print(''Session has opened/modified the following files:'')
for name in sorted(modified):
mode = modified[name]
print(mode.ljust(8) + name)
Ejecutamos esto en el intérprete (o lo usamos como un módulo), podemos ver lo que hemos modificado y cómo lo abrimos.
In [4]: with open(''ex.txt'') as file:
...: print(''ex.txt:'', file.read())
...:
ex.txt: some text.
In [5]: with open(''other.txt'', ''w'') as file:
...: file.write(''Other text./n'')
...:
In [6]: whats_modified()
Session has opened/modified the following files:
r ex.txt
w other.txt
Sin embargo, esto es algo limitado, ya que el modo se sobrescribirá cuando se vuelva a abrir un archivo, pero puede new_open
con algunas comprobaciones adicionales realizadas en new_open
.
Esta es una generalización a esta pregunta: Manera de extraer los encurtidos que entran y salen del cuaderno ipython / jupyter
En el nivel más alto, estoy buscando una forma de resumir automáticamente lo que sucede en una computadora portátil ipython. Una forma de simplificar el problema es tratar todas las manipulaciones de datos dentro del notebook como blackbox, y solo enfocarme en cuáles son sus entradas y salidas. Entonces, ¿hay alguna forma de dar acceso a los caminos de archivo a un cuaderno de ipython? ¿Cómo puede determinar fácilmente todos los diferentes archivos / sitios web que lee en la memoria y, posteriormente, también todos los archivos que luego escribe / vuelca? Estoy pensando que tal vez podría haber una función que escanea el archivo, lo analiza para entradas y salidas, y lo guarda en un diccionario para facilitar el acceso:
summary_dict = summerize_file_io(ipynb_filepath)
print summary_dict["inputs"]
> ["../Resources/Data/company_orders.csv", "http://special_company.com/company_financials.csv" ]
print summary_dict["outputs"]
> ["orders_histogram.jpg","data_consolidated.pickle"]
Me pregunto cómo hacer esto fácilmente más allá de los objetos encuadrados para incluir diferentes formatos como: txt, csv, jpg, png, etc. ... y también puede implicar leer datos directamente de la web en el propio cuaderno.