Imprimiendo en la misma línea en un cuaderno jupyter

En Python 3, podemos imprimir fácilmente en la misma línea usando el siguiente script. Uso esto para comprender el progreso de mi bucle (cuánto tiempo quedará). Sin embargo, en jupyter no funciona (se imprime en diferentes líneas)

import time for f in range(10): print(f, end='\r', flush=True) time.sleep(10) 

No funciona para desactivar la impresión bonita% pprint, e intenté lo mismo con sys.stdout.write () pero también tengo este problema.

Encontré la solución a esto un poco más tarde (tenga en cuenta que no funciona en pycharm jupyter, pero solo en la implementación del navegador). Para mí, la print funciona bien, pero aquí se recomienda la display , pero imprime apóstrofes alrededor de las cadenas.

 from IPython.display import clear_output, display for f in range(10): clear_output(wait=True) print(f) # use display(f) if you encounter performance issues time.sleep(10) 

Edición: Solo quería agregar que TQDM es a menudo una buena herramienta para este objective. Muestra las barras de progreso y le permite escribir la salida debajo de ella o diferir la descripción de cada barra. Véase también este post .

 import tqdm values = range(3) with tqdm(total=len(values), file=sys.stdout) as pbar: for i in values: pbar.set_description('processed: %d' % (1 + i)) pbar.update(1) sleep(1) 

Y el cuaderno uno con bonitos colores.

 from tqdm import tqdm, tqdm_notebook from time import sleep for i in tqdm_notebook(range(2), desc='1st loop'): sleep(0.01) tqdm.write(f"Done task {i}") 

La parte “\ r” sobrescribe la línea, si deja que se agrega a la línea. Su versión de print(f, end='', flush=False) podría funcionar, pero he leído en Python 3 que necesita usar sys.stdout.write () y lo mejor es si también agrega el comando flush.

 import sys import time for f in range(10): #delete "\r" to append instead of overwrite sys.stdout.write("\r" + str(f)) sys.stdout.flush() time.sleep(10) 

El stdout.flush es necesario en algunos sistemas o no obtendrá ningún resultado