import textwrap wrapper = textwrap.TextWrapper(**kwargs)
**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` много раз, так же можно изменить...