web-dev-qa-db-fra.com

Supprimer et remplacer les éléments imprimés

Je me demandais s’il était possible de supprimer les éléments que vous avez imprimés dans Python - pas à partir de l’interface graphique Python, mais à partir de la commande Invite, par exemple.

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

donc ça imprime

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

Mais mon problème est que je veux tout cela sur une seule ligne et que cela le supprime de lui-même quand quelque chose d'autre se présente. Donc, au lieu d’imprimer "Loading", "Loading.", "Loading... Je veux l’imprimer "Loading.", il supprime ce qui est sur la ligne et le remplace par "Loading.." puis supprime "Loading.." et le remplace (sur la même ligne) par "Loading...". C'est un peu difficile à décrire.

p.s j'ai essayé d'utiliser le caractère Backspace mais cela ne semble pas fonctionner ("\b")

Merci

80
Alex

Il suffit d'utiliser CR pour aller au début de la ligne.

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

Une solution consiste à utiliser séquences d'échappement 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)

Aussi utile parfois (par exemple si vous imprimez quelque chose de plus court qu'avant):

sys.stdout.write("\033[K") # Clear to the end of line
95
Sven Marnach
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)

Notez que vous devrez peut-être exécuter sys.stdout.flush() juste après sys.stdout.write('\r'+b), en fonction de la console sur laquelle vous effectuez l'impression, pour que les résultats soient imprimés à la demande sans aucune mise en mémoire tampon.

20
unutbu