Как удалить существующую строку при выполнении & ldquo; \ & rdquo; возврат каретки? python 3 [duplicate]

Вот решение без регулярных выражений:

text <- "fsfs blabla Honda t Asus"
x <- strsplit(text, " ", T)[[1]]
x[substr(x, 1, 1) %in% LETTERS]
# [1] "Honda" "Asus" 
2
задан jsalonen 16 June 2012 в 15:21
поделиться

2 ответа

Использование '\ b', как предложено senderle

import sys
import time

sys.stdout.write('name=')
last_lenght = 0
with open('names.txt') as names:
    for name in names:
        sys.stdout.write('\b' * last_lenght)    # go back
        sys.stdout.write(' ' * last_lenght)     # clear last name
        sys.stdout.write('\b' * last_lenght)    # reposition
        sys.stdout.write(name.strip())
        sys.stdout.flush()
        last_lenght = len(name.strip())
        time.sleep(0.5)
1
ответ дан Facundo Casco 4 September 2018 в 07:49
поделиться

Просто использование \r не будет работать в этом случае, потому что это возвращает вас к началу строки, поэтому вам придется перепечатать всю строку. Кроме того, в некоторых системах (включая Windows, я думаю) оператор Python print (функция в 3+) интерпретирует \r как новую строку. Я считаю, что этот код должен быть системно-независимым.

import sys, time

with open('names.txt', 'r') as names:
    prev_len = 0
    for name in names:
        sys.stdout.write('\r' + ' ' * prev_len)
        sys.stdout.flush()
        output_string = '\rname={}'.format(name.strip())
        prev_len = len(output_string)
        sys.stdout.write(output_string)
        sys.stdout.flush()
        time.sleep(0.3)
print

Вы также можете использовать \b, который обычно перемещает курсор на одно место.

Как вы указали, необходимо перезаписать ранее напечатанную строку пробелами , что означает, что необходимо запомнить длину предыдущей строки. Думаю, имеет смысл инкапсулировать это состояние в объект. Вот намного более чистое решение, чем выше, которое использует эту стратегию:

import sys, time

class LineUpdater(object):
    def __init__(self, outfile=None):
        self.prev_len = 0
        self.outfile = sys.stdout if outfile is None else outfile

    def write(self, line):
        line = line.strip()
        output = '\r{:<{width}}'.format(line, width=self.prev_len)
        self.prev_len = len(line)
        self.outfile.write(output)
        self.outfile.flush()

with open('names.txt', 'r') as names:
    out = LineUpdater()
    for name in names:
        out.write('name={}'.format(name))
        time.sleep(0.3)
    print
5
ответ дан senderle 4 September 2018 в 07:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: