python python-3.x printing python-3.2

python - Eliminar y reemplazar elementos impresos



python-3.x printing (3)

Esta pregunta ya tiene una respuesta aquí:

Me preguntaba si era posible eliminar elementos que ha impreso en Python, no desde la GUI de Python, sino desde el símbolo del sistema. p.ej

a = 0 for x in range (0,3): a = a + 1 b = ("Loading" + "." * a) print (a)

entonces imprime

>>>Loading >>>Loading. >>>Loading.. >>>Loading...

Pero, mi problema es que quiero que todo esto en una sola línea, y para que se lo quite cuando algo más se presente. Entonces, en lugar de imprimir "Loading", "Loading.", "Loading... Quiero que imprima "Loading." , luego quita lo que está en la línea y lo reemplaza con "Loading.." y luego elimina "Loading.." y lo reemplaza (en la misma línea) con "Loading..." . Es algo difícil de describir.

ps He intentado usar el carácter Retroceso, pero parece que no funciona ( "/b" )

Gracias


Solo usa CR para ir al comienzo de la línea.

import time for x in range (0,5): b = "Loading" + "." * x print (b, end="/r") time.sleep(1)


Una forma es usar secuencias de escape ANSI :

import sys import time for i in range(10): print("Loading" + "." * i) sys.stdout.write("/033[F") # Cursor up one line time.sleep(1)

También a veces es útil (por ejemplo, si imprime algo más corto que antes):

sys.stdout.write("/033[K") # Clear to the end of line


import sys import time a = 0 for x in range (0,3): a = a + 1 b = ("Loading" + "." * a) # /r prints a carriage return first, so `b` is printed on top of the previous line. sys.stdout.write(''/r''+b) time.sleep(0.5) print (a)

Tenga en cuenta que es posible que sys.stdout.flush() ejecutar sys.stdout.flush() justo después de sys.stdout.write(''/r''+b) según la consola que esté imprimiendo para que se impriman los resultados cuando se solicite sin ningún almacenamiento en búfer.