@pynew_user

Текст не выводится в нужном формате. Почему?

У меня есть файл и нужно вывести текст из него. В строках, в которых больше 80 символов нужно выделять символы (до последнего пробела) и присоединять его уже к следующей строке, что бы в текущей строке оставалось 80 символов или меньше. Файл я считываю, определяю окончание строки и пытаюсь присоединить его к началу следующей, но у меня окончание образуется другую строку, а следующая начинается как обычно.

Мой код:

with open ('C://Users//telel//Desktop//text.txt', 'r', encoding='utf-8') as dataset:
    rad = []
    last = ''
    lst = dataset.readlines()
    for s in lst:
        i = last + ' ' + s
        if len(i)>=80:
            for j in range(len(i)-1, 0, -1):
                if i[j] == ' ' and len(i[:j])<=80:
                    print(i[:j])
                    last = i[j+1:]
                    break
        else:
           print(i, end='')
           last = ''             
    if last != '':
        print(last)


То, что должно выводить:

Воспитанные люди должны удовлетворять следующим условиям:
… Они уважают человеческую личность, всегда снисходительны, мягкие, вежливые,
уступчивые… … Они уважают чужую собственность, а потому платят долги.
… Не лгут даже в пустяках… Они не лезут с откровенностями, когда их не спрашивают..
..… Они не унижают себя с тою целью, чтобы вызвать в другом сочувствие…
… Они не суетны…
… Если имеют в себе талант, то уважают его… Они жертвуют для него всем…
… Они воспитывают в себе эстетику*…
… Тут нужны беспрерывные дневной и ночной труд, вечное чтение, воля… Тут дорог
каждый час.

Что выводит:
… Они уважают человеческую личность, всегда снисходительны, мягкие, вежливые,
уступчивые…
… Они уважают чужую собственность, а потому платят долги.
… Не лгут даже в пустяках… Они не лезут с откровенностями, когда их не
спрашивают…
… Они не унижают себя с тою целью, чтобы вызвать в другом
сочувствие…
… Они не суетны…
… Если имеют в себе талант, то уважают его… Они жертвуют для него всем…
… Они воспитывают в себе эстетику*…
… Тут нужны беспрерывные дневной и ночной труд, вечное чтение, воля… Тут дорог
каждый час.
  • Вопрос задан
  • 56 просмотров
Решения вопроса 1
@twistfire92
Python backend developer
Вот предлагаю поиграться с этим кодом. Накидал что первое в голову пришло, но без всяких индексов i j в которых можно легко запутаться
s = 'Вот какая-то длинная строка, ниже я установил лимит. Строка разбивается на подстроки по длине не превосходящей этот лимит.'
limit = 20


def foo(s, limit):
    rows=[]
    current_row=[]
    length=0
    lst = s.split()
    for word in lst:
        if limit <= (length + len(word) + 1):
            rows.append(' '.join(current_row))
            current_row=[word]
            length = len(word)+1
        else:
            length += len(word)+1
            current_row.append(word)
    rows.append(' '.join(current_row))

    return('\n'.join(rows))

print(foo(s, limit))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы