python - Eliminar y reemplazar elementos impresos
python-3.x printing (3)
Esta pregunta ya tiene una respuesta aquí:
- Imprime en una línea dinámicamente 17 respuestas
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.