textwrap
— Обёртывание и заполнение текста
Модуль textwrap
предоставляет удобные функции, а также
класс TextWrapper
, выполняющий всю работу. Если вы просто
оборачиваете или заполняете одну или две текстовые строки, удобных функций
должно быть достаточно; в противном случае для повышения эффективности следует
использовать экземпляр TextWrapper
.
-
textwrap.
wrap
(text, width=70, **kwargs) Оборачивает отдельный абзац в text (строку), поэтому длина каждой строки не превышает width символов. Возвращает список строк вывода без финальных символов новой строки.
Необязательные ключевые аргументы соответствуют атрибутам экземпляра
TextWrapper
, описанным ниже. width по умолчанию70
.Дополнительные сведения о поведении
wrap()
см. в методеTextWrapper.wrap()
.
-
textwrap.
fill
(text, width=70, **kwargs) Оборачивает отдельный абзац в text и возвращает единственную строку, содержащую обернутый абзац.
fill()
— это сокращение для:"\n".join(wrap(text, ...))
В частности,
fill()
принимает точно такие же ключевые аргументы, какwrap()
.
-
textwrap.
shorten
(text, width, **kwargs) Свернуть и усечь данный text, чтобы он соответствовал данному width.
Сначала сворачиваются пробелы в text (все пробелы заменяются одиночными пробелами). Если результат соответствует width, он возвращается. В противном случае с конца отбрасывается достаточно слов, чтобы оставшиеся слова плюс
placeholder
поместились вwidth
:>>> textwrap.shorten("Hello world!", width=12) 'Hello world!' >>> textwrap.shorten("Hello world!", width=11) 'Hello [...]' >>> textwrap.shorten("Hello world", width=10, placeholder="...") 'Hello...'
Необязательные ключевые аргументы соответствуют атрибутам экземпляра
TextWrapper
, описанным ниже. Обратите внимание, что перед передачей текста в функциюTextWrapper
fill()
пробелы удаляются, поэтому изменение значенийtabsize
,expand_tabs
,drop_whitespace
иreplace_whitespace
не повлияет.Добавлено в версии 3.4.
-
textwrap.
dedent
(text) Удалить все общие начальные пробелы из каждой строки в text.
Это можно использовать для выравнивания строк в тройных кавычках с левым краем отображения, при этом они будут отображаться в исходном коде в форме с отступом.
Обратите внимание, что табуляция и пробелы обрабатываются как пробелы, но они не равны: считается, что строки
" hello"
и"\thello"
не содержат общих ведущих пробелов.Строки, содержащие только пробелы, игнорируются на входе и нормализуются до одного символа новой строки на выходе.
Например:
def test(): # Завершить первую строку символом \ чтобы избежать пустой строки! s = '''\ hello world ''' print(repr(s)) # распечатает ' hello\n world\n ' print(repr(dedent(s))) # распечатает 'hello\n world\n'
-
textwrap.
indent
(text, prefix, predicate=None) Добавить prefix в начало выбранных строк в text.
Строки разделяются вызовом
text.splitlines(True)
.По умолчанию prefix добавляется ко всем строкам, которые не состоят исключительно из пробелов (включая любые окончания строк).
Например:
>>> s = 'hello\n\n \nworld' >>> indent(s, ' ') ' hello\n\n \n world'
Необязательный аргумент predicate можно использовать для управления отступом строк. Например, легко добавить prefix даже к пустым строкам и строкам, состоящим только из пробелов:
>>> print(indent(s, '+ ', lambda line: True)) + hello + + + world
Добавлено в версии 3.3.
wrap()
, fill()
и shorten()
работают, создавая экземпляр
TextWrapper
и вызывая для него один метод. Этот экземпляр не
используется повторно, поэтому для приложений, которые обрабатывают множество
текстовых строк с использованием wrap()
и/или fill()
, может быть
более эффективным создать собственный объект TextWrapper
.
Текст предпочтительно размещать по пробелам и сразу после дефисов в словах с
переносом; только тогда длинные слова будут разбиты, если необходимо, если
TextWrapper.break_long_words
не установлен в ложь.
-
class
textwrap.
TextWrapper
(**kwargs) Конструктор
TextWrapper
принимает ряд необязательных ключевых аргументов. Каждый ключевой аргумент соответствует атрибуту экземпляра, например:wrapper = TextWrapper(initial_indent="* ")
такой же, как:
wrapper = TextWrapper() wrapper.initial_indent = "* "
Вы можете повторно использовать один и тот же объект
TextWrapper
много раз, и вы можете изменить любые его параметры, напрямую назначая атрибуты экземпляра между применениями.Атрибуты экземпляра
TextWrapper
(и ключевые аргументы конструктора) следующие:-
width
(По умолчанию:
70
) максимальная длина переносимых строк. Если во входном тексте нет отдельных слов длиннееwidth
,TextWrapper
гарантирует, что ни одна строка вывода не будет длиннееwidth
символов.
-
expand_tabs
(По умолчанию:
True
) Если истинно, то все символы табуляции в text будут заменены пробелами с использованием методаexpandtabs()
из text.
-
tabsize
(По умолчанию:
8
) Еслиexpand_tabs
истинно, то все символы табуляции в text будут расширены до нуля или более пробелов, в зависимости от текущего столбца и заданного размера табуляции.Добавлено в версии 3.3.
-
replace_whitespace
(По умолчанию:
True
) Если истинно, после раскрытия табуляции, но перед переносом, методwrap()
заменит каждый пробельный символ одним пробелом. Заменяются следующие символы пробела: табуляция, новая строка, вертикальная табуляция, перевод страницы и возврат каретки ('\t\n\v\f\r'
).Примечание
Если
expand_tabs
ложно, аreplace_whitespace
— истина, каждый символ табуляции будет заменён одним пробелом, который не совпадает с расширением табуляции.Примечание
Если
replace_whitespace
ложно, новые строки могут появиться в середине строки и вызвать странный вывод. По этой причине текст должен быть разделен на абзацы (используяstr.splitlines()
или аналогичный), которые обёрнуты отдельно.
-
drop_whitespace
(По умолчанию:
True
) если истинно, пробелы в начале и конце каждой строки (после переноса, но до отступа) удаляются. Однако пробел в начале абзаца не удаляется, если за ним следует не пробел. Если отбрасываемый пробел занимает всю строку, вся строка удаляется.
-
initial_indent
(По умолчанию:
''
) строка, которая будет добавлена к первой строке обёрнутого вывода. Считается по длине первой строки. Пустая строка без отступа.
-
subsequent_indent
(По умолчанию:
''
) Строка, которая будет добавлена ко всем строкам обёрнутого вывода, кроме первой. Учитывается длина каждой строки, кроме первой.
-
fix_sentence_endings
(По умолчанию:
False
) Если истинен,TextWrapper
пытается обнаружить окончания предложений и гарантирует, что предложения всегда разделяются ровно двумя пробелами. Обычно это желательно для текста с моноширинным шрифтом. Однако алгоритм обнаружения предложений несовершенен: он предполагает, что окончание предложения состоит из строчной буквы, за которой следует одна из'.'
,`'!'
, или'?'
, за которой, возможно, следует один из'"'
или"'"
, за которым следует пробел. Одна из проблем этого алгоритма заключается в том, что он не может определить разницу между «Dr.» в[...] Dr. Frankenstein's monster [...]
и «Spot.» в
[...] See Spot. See Spot run [...]
fix_sentence_endings
по умолчанию ложно.Поскольку алгоритм обнаружения предложений основан на
string.lowercase
для определения «строчной буквы» и соглашении об использовании двух пробелов после точки для разделения предложений в одной строке, он специфичен для англоязычных текстов.
-
break_long_words
(По умолчанию:
True
) Если истинно, то слова длиннееwidth
будут разбиты, чтобы гарантировать, что ни одна строка не будет длиннееwidth
. Если он ложный, длинные слова не будут разбиты, а некоторые строки могут быть длиннееwidth
. (Длинные слова будут помещены в строку сами по себе, чтобы минимизировать величину превышенияwidth
.)
-
break_on_hyphens
(По умолчанию:
True
) Если истинно, перенос будет происходить предпочтительно по пробелам и сразу после дефисов в составных словах, как это принято в английском языке. Если ложно, только пробелы будут рассматриваться как потенциально хорошие места для разрывов строк, но вам нужно установитьbreak_long_words
в ложь, если вы хотите действительно незащищенные слова. По умолчанию в предыдущих версиях всегда разрешалось разбивать слова через дефис.
-
max_lines
(По умолчанию:
None
) Если неNone
, то вывод будет содержать не более max_lines строк, причем placeholder появится в конце вывода.Добавлено в версии 3.4.
-
placeholder
(По умолчанию:
' [...]'
) строка, которая появится в конце выходного текста, если он был усечён.Добавлено в версии 3.4.
TextWrapper
также предоставляет некоторые общедоступные методы, аналогичные вспомогательным функциям на уровне модуля:-
wrap
(text) Оборачивает отдельный абзац в text (строку), поэтому длина каждой строки не превышает
width
символов. Все параметры обёртывания берутся из атрибутов экземпляраTextWrapper
. Возвращает список строк вывода без заключительных символов новой строки. Если у заключённого в обёртку вывод нет содержимого, возвращает пустой список.
-
fill
(text) Оборачивает отдельный абзац в text и возвращает единственную строку, содержащую обёрнутый абзац.
-