textwrap — Обёртывание и форматирование текста
Исходный код: Lib/textwrap.py
Модуль 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, описанным ниже. Обратите внимание, что пробелы сжимаются до того, как текст передаётся функцииTextWrapperfill(), поэтому изменение значенияtabsize,expand_tabs,drop_whitespaceиreplace_whitespaceне окажет никакого эффекта.Добавлена в версии 3.4.
-
textwrap.dedent(text) -
Удаляет общие начальные пробелы из каждой строки в text.
Это можно использовать для выравнивания строк тройных кавычек по левому краю экрана, сохраняя их отступы в исходном коде.
Обратите внимание, что табуляции и пробелы обрабатываются как пробелы, но они не равны: строки
" hello"и"\thello"считаются не имеющими общих начальных пробелов.Строки, содержащие только пробелы, игнорируются на входе и нормализуются до одной символа новой строки на выходе.
Например:
def test(): # end first line with \ to avoid the empty line! s = '''\ hello world ''' print(repr(s)) # prints ' hello\n world\n ' print(repr(dedent(s))) # prints '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. Например, легко добавить prefix даже к пустым и содержащим только пробелы строкам:
>>> print(indent(s, '+ ', lambda line: True)) + hello + + + world
Добавлена в версии 3.3.
wrap(), fill() и shorten() работают путём создания экземпляра TextWrapper и вызова на нём единственного метода. Этот экземпляр не переиспользуется, поэтому для приложений, обрабатывающих много строк текста с помощью wrap() и/или fill(), может быть эффективнее создать собственный объект TextWrapper.
Текст предпочтительно обёртывается на пробелах и сразу после тире в словах с дефисами; только тогда длинные слова будут разбиваться при необходимости, если TextWrapper.break_long_words не установлено в значение false.
-
class textwrap.TextWrapper(**kwargs) -
Конструктор
TextWrapperпринимает несколько необязательных ключевых аргументов. Каждый ключевой аргумент соответствует атрибуту экземпляра, поэтому, напримерwrapper = TextWrapper(initial_indent="* ")
эквивалентно
wrapper = TextWrapper() wrapper.initial_indent = "* "
Вы можете многократно использовать один и тот же объект
TextWrapper, и изменить любые его параметры, присвоив новые значения атрибутам экземпляра между использованиями.Атрибуты экземпляра
TextWrapper(и ключевые аргументы конструктора) следующие:-
width -
(по умолчанию:
70) Максимальная длина выровненных строк. Пока длина отдельных слов в входном тексте не превышаетwidth,TextWrapperгарантирует, что длина ни одной выходной строки не будет превышатьwidthсимволов.
-
expand_tabs -
(по умолчанию:
True) Если True, то все символы табуляции в тексте text будут преобразованы в пробелы с помощью методаexpandtabs()объекта text.
-
tabsize -
(по умолчанию:
8) Еслиexpand_tabsимеет значение True, все символы табуляции в тексте будут преобразованы в один или несколько пробелов в зависимости от текущего столбца и заданного размера табуляции.Добавлен в версии 3.3.
-
replace_whitespace -
(по умолчанию:
True) Если True, после расширения табуляций, но перед выравниванием, методwrap()заменит каждый символ пробела одним пробелом. Заменяемые символы пробелов: табуляция, перевод строки, вертикальная табуляция, разделитель страницы и возврат каретки ('\t\n\v\f\r').Примечание
Если
expand_tabsимеет значение False иreplace_whitespace— True, каждый символ табуляции будет заменён одним пробелом, что не эквивалентно расширению табуляции.Примечание
Если
replace_whitespaceимеет значение False, переносы строк могут появляться посреди строки, что приведёт к некорректной выводимой информации. По этой причине текст должен быть разделён на абзацы (используяstr.splitlines()или аналогичный метод), которые выравниваются по отдельности.
-
drop_whitespace -
(по умолчанию:
True) Если True, пробелы в начале и конце каждой строки (после выравнивания, но до отступа) удаляются. Однако пробелы в начале абзаца не удаляются, если за ними следуют не пробельные символы. Если пробелы, которые подлежат удалению, занимают всю строку, вся строка удаляется.
-
initial_indent -
(по умолчанию:
'') Строка, которая будет добавлена к первой строке выровненного текста. Учитывается при подсчёте длины первой строки. Пустая строка не создаёт отступ.
-
subsequent_indent -
(по умолчанию:
'') Строка, которая будет добавлена ко всем строкам выровненного текста, кроме первой. Учитывается при подсчёте длины каждой строки, кроме первой.
-
fix_sentence_endings -
(по умолчанию:
False) Если True,TextWrapperпытается определить окончания предложений и гарантирует, что предложения всегда разделяются ровно двумя пробелами. Это обычно необходимо для текста в моноширинном шрифте. Однако алгоритм определения предложений несовершенен: он предполагает, что окончание предложения состоит из строчной буквы, за которой следует один из'.','!', или'?', возможно, за которым следует один из'"'или"'", и за которым следует пробел. Одна из проблем этого алгоритма заключается в том, что он не может определить разницу между «Dr.» в[...] Dr. Frankenstein's monster [...]
и «Spot.» в
[...] See Spot. See Spot run [...]
fix_sentence_endingsпо умолчанию имеет значение False.Поскольку алгоритм определения предложений полагается на
string.lowercaseдля определения «строчной буквы» и соглашения об использовании двух пробелов после точки для разделения предложений в одной строке, он специфичен для текстов на английском языке.
-
break_long_words -
(по умолчанию:
True) Если True, слова, длиннееwidth, будут разбиты для обеспечения того, чтобы ни одна строка не была длиннееwidth. Если False, длинные слова не будут разбиваться, и некоторые строки могут быть длиннееwidth. (Длинные слова будут помещаться на отдельную строку, чтобы минимизировать превышение длиныwidth).
-
break_on_hyphens -
(по умолчанию:
True) Если True, выравнивание происходит предпочтительно по пробелам и сразу после дефисов в составных словах, как это принято в английском языке. Если False, то только пробелы рассматриваются как потенциальные места разрыва строк, но вам необходимо установитьbreak_long_wordsв False, если вы хотите неразрывные слова. По умолчанию в предыдущих версиях всегда разрешалось разделять слова с дефисами.
-
max_lines -
(по умолчанию:
None) Если неNone, то вывод будет содержать не более max_lines строк, а в конце вывода будет отображаться placeholder.Добавлен в версии 3.4.
-
placeholder -
(по умолчанию:
' [...]') Строка, которая будет отображаться в конце выводимого текста, если он был урезан.Добавлен в версии 3.4.
TextWrapperтакже предоставляет некоторые публичные методы, аналогичные удобным функциям модуля:-
wrap(text) -
Выравнивает единственный абзац в text (строка), чтобы каждая строка не превышала
widthсимволов. Все параметры выравнивания взяты из атрибутов экземпляра объектаTextWrapper. Возвращает список выходных строк без завершающих переводов строк. Если выровненный вывод не содержит содержимого, возвращаемый список пустой.
-
fill(text) -
Выравнивает единственный абзац в тексте и возвращает одну строку, содержащую выровненный абзац.
-
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.7/library/textwrap.html