2011-03-13 7 views
38

[Używanie Pythona 3.2] Zastanawiałem się, czy można usunąć elementy wydrukowane w pythonie, a nie z python gui, ale z polecenia propt. np.Python - Usuń i zamień wydrukowane elementy

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

tak drukuje to

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

Ale, mój problem jest chcę to wszystko w jednej linii, a dla niego to usunąć to samo kiedy somthing jeszcze przyjdzie. więc zamiast iść, "ładowanie", "ładowanie". "loa .... Chcę, żeby to było" Ładowanie ". Następnie usuwa to, co jest na linii i zastępuje je" Ładowanie ... ", a następnie usuwa "Ładowanie ..." i zastępuje go (w tej samej linii) słowem "Ładowanie ..." Jest to dość trudne do opisania.

ps Próbowałem użyć znaku Backspace, ale wygląda na to, że działa (" \ b ")

Dzięki

+2

Próbny powrót karetki? '\ r' – gnab

+2

Jaki jest tu punkt zmiennej 'a'? Możesz po prostu użyć x jako swojej zmiennej i zrobi to samo! –

Odpowiedz

73

Wystarczy użyć CR, aby przejść do początku linii.

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

Dziękuję bardzo, ale czy wiesz, czy możliwe jest usunięcie "Ładowanie" przed, więc zamiast iść "Ładowanie. Ładowanie ... Ładowanie ..." itd ... to idzie "Ładowanie", a następnie usunięte i mówi "Ładowanie". a następnie to usunięte i mówi "Ładowanie ..." i tak dalej? – Alex

+0

@Alex Tak, można zastąpić go spacjami. Ale dlaczego? – Keith

+0

@Alex: Czy to naprawdę drukowanie 'LoadingLoading.Loading..Loading ...' dla ciebie? Na jakim terminalu go uruchomisz? –

63

Jednym ze sposobów jest użycie :

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

czasami użyteczna (na przykład, jeśli wydrukować coś krótszego niż wcześniej):

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

Jeszcze prostszy sposób to po prostu nie wchodzić w dół, używając 'print (" Ładowanie "+". "* I, end =" \ r ")' – Keith

+1

@Keith: Masz rację, będę edytować mój wpis :) –

+4

punktów bonusowych za wyraźną linię. Dzięki! – 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) 

Zauważ, że może trzeba uruchomić sys.stdout.flush() zaraz po sys.stdout.write('\r'+b) zależności od konsoli robisz drukowanie mieć wyniki drukowane na żądanie bez buforowania.