Сообщить об ошибке.

Класс TextWrapper() модуля textwrap в Python

Точное форматирование абзаца текста для вывода на печать

Синтаксис:

import textwrap

wrapper = textwrap.TextWrapper(**kwargs)

Параметры:

Возвращаемое значение:

  • отформатированный абзац в виде строки.

Описание:

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

import textwrap
wrapper = textwrap.TextWrapper(initial_indent="* ")

# эквивалентно

wrapper = textwrap.TextWrapper()
wrapper.initial_indent = "* "

Можно повторно использовать один и тот же объект TextWrapper много раз, так же можно изменить любой из его параметров путем прямого назначения атрибутов экземпляра между использованием.

Атрибуты экземпляра класса TextWrapper() и ключевые аргументы **kwargs выглядят следующим образом:

width:

Максимальная длина переносимых строк. Пока во входном тексте нет отдельных слов длиннее ширины width, Класс TextWrapper() гарантирует, что ни одна выходная строка не будет длиннее width символов. По умолчанию width=70 символов.

expand_tabs:

Если expand_tabs=True, то все символы табуляции в тексте будут расширяться до пробелов с использованием метода строки str.expandtabs(). По умолчанию expand_tabs=True.

tabsize:

Если expand_tabs=True, то все символы табуляции в тексте будут расширены до нуля или более пробелов, в зависимости от текущего столбца и заданного размера табуляции. По умолчанию tabsize=8 символов.

replace_whitespace:

Если replace_whitespace=True, то после замены табуляций пробелами, но перед переносом wrap(), метод заменит идущие подряд символы пробела одним пробелом. Заменяемые пробельные символы: табуляция, новая строка, вертикальная табуляция, подача формы и возврат каретки '\t\n\v\f\r'. По умолчанию replace_whitespace=True.

Важно:

  • Если значение expand_tabs=False и replace_whitespace=True, то каждый символ табуляции будет заменен одним пробелом, который не совпадает с расширением табуляции tabsize.
  • Если replace_whitespace=False, то новые строки могут появляться в середине строки и вызывать странный вывод. По этой причине текст следует разбить на абзацы используя метод строки str.splitlines()
drop_whitespace:

Если drop_whitespace=True, то пробел в начале и конце каждой строки, после переноса wrap(), но перед отступом initial_indent удаляется. Однако пробел в начале абзаца не удаляется, если за ним следует непробельный символ. Если удаляемый пробел занимает всю строку, вся строка удаляется. По умолчанию drop_whitespace=True.

initial_indent:

Строка, которая будет предшествовать первой строке. Считается по длине первой строки. Пустая строка не будет иметь отступа. По умолчанию initial_indent=''.

subsequent_indent:

Строка, которая будет добавлена ​​ко всем строкам переноса, кроме первой. Считается по длине каждой строки, кроме первой. По умолчанию subsequent_indent=''.

fix_sentence_endings:

При fix_sentence_endings=True, класс TextWrapper() пытается обнаружить окончания предложений и убедиться, что предложения всегда разделены ровно двумя пробелами. Это обычно требуется для текста в моноширинном шрифте. Однако алгоритм обнаружения предложений несовершенен. Он предполагает, что окончание предложения состоит из строчной буквы, за которой следует одна из '.', '!', или '?', возможно, за ним следует один из "'" или '"', за которым следует пробел. Одна из проблем с этим алгоритмом заключается в том, что он не может обнаружить разницу между "Dr." в

[...] Dr. Frankenstein's monster [...]

и "Spot." в

[...] See Spot. See Spot run [...]

По умолчанию fix_sentence_endings=False.

Поскольку алгоритм определения предложений основан на str.lowercase` определении "строчной буквы" и соглашении об использовании двух пробелов после точки для разделения предложений в одной строке, он специфичен для англоязычных текстов.

break_long_words:

Если break_long_words=True, то тогда слова длиннее, чем width будут разбиты, чтобы ни одна строка не была длиннее width. Если оно False, длинные слова не будут разбиты, а некоторые строки могут быть длиннее, чем width. Длинные слова будут помещены в строку сами по себе, чтобы минимизировать сумму, на которую превышен width. По умолчанию break_long_words=True.

break_on_hyphens:

Если break_on_hyphens=True, перенос будет происходить предпочтительно на пробелах и сразу после дефиса в составных словах, как это принято в английском языке. Если False, то только пробелы будут рассматриваться как потенциально хорошие места для разрывов строк, но вам нужно установить break_on_hyphens=False, если вы хотите безопасно сделать переносы слов в абзаце. По умолчанию break_on_hyphens=True.

max_lines:

Целое число. Если max_lines не None, то вывод будет содержать не более max_lines строк с заполнителем, появляющимся в конце вывода. По умолчанию max_lines=None.

placeholder:

Строка, которая будет отображаться в конце выходного текста, если она была усечена. По умолчанию placeholder='[...]'.

Открытые методы, аналогичные вспомогательным функциям уровня модуля textwrap:

wrap(text):

Разбивает абзац text по строкам так, что каждая строка имеет не более width символов длиной. Возвращает список строк, без завершающего символа новой строки \n. Все параметры переноса берутся из атрибутов экземпляра класса TextWrapper. Если в text нет содержимого, возвращаемый пустой список [].

fill(text):

Разбивает text по строкам так, что каждая строка имеет не более width символов длиной. Возвращает одну строку, содержащую абзац.

Примеры использования:

text = """
       Можно повторно использовать один и 
       тот же объект `TextWrapper` много раз, 
       так же можно изменить любой из его 
       параметров путем прямого назначения 
       атрибутов экземпляра между использованием.
      """

from textwrap import TextWrapper, dedent

tmp = dedent(text)
wrapper = TextWrapper(width=55) 
wrapper.initial_indent = ' ' * 4
wrapper.subsequent_indent = ' '
new_text = wrapper.fill(tmp)
print(new_text)
#     Можно повторно использовать один и  тот же объект
# `TextWrapper` много раз,  так же можно изменить любой
# из его  параметров путем прямого назначения  атрибутов
# экземпляра между использованием.

wrapper.placeholder = '...'
wrapper.max_lines = 2
new_text =  wrapper.fill(tmp)
print(new_text)
#     Можно повторно использовать один и  тот же объект
# `TextWrapper` много раз,  так же можно изменить...