181 votes

Retirer et remplacer les documents imprimés

Je me demandais s'il était possible de supprimer des éléments que vous avez imprimés en Python - pas à partir de l'interface graphique de Python, mais à partir de l'invite de commande. Par exemple

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

pour qu'il imprime

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

Mais mon problème est que je veux que tout cela soit sur une seule ligne, et qu'elle se retire d'elle-même lorsque quelque chose d'autre se présente. Donc au lieu d'imprimer "Loading", "Loading.", "Loading... Je veux qu'il s'imprime "Loading." puis il supprime ce qui se trouve sur la ligne et le remplace par "Loading.." et supprime ensuite "Loading.." et le remplace (sur la même ligne) par "Loading..." . C'est difficile à décrire.

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

269voto

Keith Points 13800

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)

140voto

Sven Marnach Points 133943

L'une des solutions 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)

Parfois utile aussi (par exemple si vous imprimez quelque chose de plus court qu'auparavant) :

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

41voto

unutbu Points 222216
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 qu'il se peut que vous deviez exécuter sys.stdout.flush() juste après sys.stdout.write('\r'+b) en fonction de la console dans laquelle vous effectuez l'impression, afin que les résultats soient imprimés au moment voulu, sans aucune mise en mémoire tampon.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X