2011-03-13 14 views
38

[Utilizzo di Python 3.2] Mi chiedevo se fosse possibile rimuovere elementi che sono stati stampati in python, non dal guo python ma dal comando propt. ad es.Python - Rimuovi e sostituisci Articoli stampati

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

così esso stampa

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

Ma, il mio problema è che voglio questo tutto su una riga, e per esso si rimuoverlo sé quando somthing altro arriva. così invece di andare, "caricare", "caricare"., "loa .... voglio che abbia" Caricamento ", quindi rimuove ciò che è in linea e lo sostituisce con" Caricamento .. "e quindi rimuove "Caricamento in corso ..." e lo sostituisce (sulla stessa riga) con "Caricamento in corso ..." È piuttosto difficile da scrivere

ps Ho provato a utilizzare il carattere di Backspace ma non sembra funzionare (" \ b ")

Grazie

+2

Ritorno a capo provato? '\ r' – gnab

+2

Qual è il punto della variabile 'a' qui? Puoi semplicemente usare x come variabile e farà la stessa cosa! –

risposta

73

Basta usare CR per andare all'inizio della riga.

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

Grazie mille, ma, sai se è possibile rimuovere prima il "Caricamento", quindi invece di andare su "Caricamento. Caricamento ... Caricamento ..." ecc. "Caricamento", quindi rimosso e dice "Caricamento". e poi questo è rimosso e dice "Caricamento .." e così via? – Alex

+0

@Alex Sì, potresti sovrascriverlo con spazi. Ma perché? – Keith

+0

@Alex: Sta davvero stampando 'LoadingLoading.Loading..Loading ...' per te? Su che tipo di terminale lo stai eseguendo? –

63

Un modo è quello di utilizzare :

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

Inoltre a volte utile (ad esempio se si stampa qualcosa di più breve rispetto a prima):

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

Un modo ancora più semplice è semplicemente non andare giù in primo luogo usando 'print (" Loading "+". "* I, end =" \ r ")' – Keith

+1

@Keith: hai ragione, modifico il mio post :) –

+4

punti bonus per la linea chiara. Grazie! – Brooks

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

Si noti che potrebbe essere necessario eseguire sys.stdout.flush() subito dopo sys.stdout.write('\r'+b) a seconda di quale console si sta facendo la stampa per avere i risultati stampato quando richiesto senza buffering.

Problemi correlati