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
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)
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
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.