Подтвердить что ты не робот

Python - удаление и замена печатных элементов

[Использование Python 3.2] Мне было интересно, можно ли удалить элементы, которые вы напечатали в python, а не из python gui, но из команды propt. например.

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

чтобы он печатал

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

Но, Моя проблема в том, что я хочу, чтобы все это было на одной линии, и для этого она удаляет ее, когда что-то еще приходит. поэтому вместо того, чтобы идти, "загружать", "загружать". "loa.... Я хочу, чтобы он получил" Загрузка ". Затем он удаляет то, что находится на линии, и заменяет его" Загрузка.. ", а затем удаляет" Загрузка.. "и заменяет его (в той же строке) на" Загрузка...". Его трудно описать.

p.s Я попытался использовать шаблон Backspace, но он не работает ( "\ b" )

Спасибо

4b9b3361

Ответ 1

Просто используйте CR, чтобы перейти к началу строки.

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

Ответ 2

Один из способов - использовать ANSI escape-последовательности:

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

Также иногда полезно (например, если вы печатаете что-то короче, чем раньше):

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

Ответ 3

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)

Обратите внимание, что вам может потребоваться запустить sys.stdout.flush() сразу после sys.stdout.write('\r'+b), в зависимости от того, какая консоль вы выполняете печать, чтобы результаты были распечатаны по запросу без какой-либо буферизации.