Шаг 38.
Python: сборник рецептов.
Строки и текст. Разбивка текста на фиксированное количество колонок

    На этом шаге мы рассмотрим способы решения этой задачи.

Задача

    У вас есть длинные строки, которые вы хотите переформатировать таким образом, чтобы они распределились по заданному пользователем количеству колонок.

Решение

    Используйте модуль textwrap для переформатирования выводимого текста. Предположим, что у вас есть такая длинная строка:

>>> s = "Look into my eyes, look into my eyes, the eyes, the eyes, \
the eyes, not around the eyes, don't look around the eyes, \
look into my eyes, you're under."
>>> 

    Вот как вы можете использовать модуль textwrap, чтобы переформатировать ее:

>>> import textwrap
>>> print(textwrap.fill(s, 70))
Look into my eyes, look into my eyes, the eyes, the eyes, the eyes,
not around the eyes, don't look around the eyes, look into my eyes,
you're under.
>>> print(textwrap.fill(s, 40))
Look into my eyes, look into my eyes,
the eyes, the eyes, the eyes, not around
the eyes, don't look around the eyes,
look into my eyes, you're under.
>>> print(textwrap.fill(s, 40, initial_indent=' '))
 Look into my eyes, look into my eyes,
the eyes, the eyes, the eyes, not around
the eyes, don't look around the eyes,
look into my eyes, you're under.
>>> print(textwrap.fill(s, 40, subsequent_indent=' '))
Look into my eyes, look into my eyes,
 the eyes, the eyes, the eyes, not
 around the eyes, don't look around the
 eyes, look into my eyes, you're under.
>>> 


Обсуждение

    Модуль textwrap - это простой способ очистить текст, особенно если вы хотите, чтобы вывод соответствовал размерам терминала. К вопросу о размере терминала: вы можете получить его, используя os.get_terminal_size(). Например:

>>> import os
>>> os.get_terminal_size().columns
80
>>>

    У метода fill() есть несколько дополнительных параметров, которые контролируют то, как он обращается с табуляцией, окончаниями предложений и т. д. За подробностями обратитесь к документации класса textwrap.TextWrapper https://docs.python.org/3.3/library/textwrap.html#textwrap.TextWrapper

    На следующем шаге мы рассмотрим работу с HTML- и XML-сущностями в тексте.




Предыдущий шаг Содержание Следующий шаг