textwrap — Перенос и заполнение текста
Исходный код: Lib/textwrap.py
Модуль textwrap предоставляет несколько удобных функций, а также TextWrapper — класс, выполняющий всю работу. Если вам нужно перенести или заполнить всего одну-две текстовые строки, удобных функций будет достаточно; в противном случае для повышения эффективности следует использовать экземпляр TextWrapper.
-
textwrap.wrap(text, width=70, *, initial_indent='', subsequent_indent='', expand_tabs=True, replace_whitespace=True, fix_sentence_endings=False, break_long_words=True, drop_whitespace=True, break_on_hyphens=True, tabsize=8, max_lines=None, placeholder=' [...]') -
Переносит единственный абзац в text (строке), так чтобы длина каждой строки не превышала width символов. Возвращает список выходных строк без завершающих символов перевода строки.
Необязательные именованные аргументы соответствуют атрибутам экземпляра
TextWrapper, описанным ниже.Дополнительные сведения о поведении
wrap()см. в описании методаTextWrapper.wrap().
-
textwrap.fill(text, width=70, *, initial_indent='', subsequent_indent='', expand_tabs=True, replace_whitespace=True, fix_sentence_endings=False, break_long_words=True, drop_whitespace=True, break_on_hyphens=True, tabsize=8, max_lines=None, placeholder=' [...]') -
Переносит единственный абзац в text и возвращает одну строку, содержащую перенесённый абзац.
fill()— это сокращение для"\n".join(wrap(text, ...))
В частности,
fill()принимает те же именованные аргументы, что иwrap().
-
textwrap.shorten(text, width, *, fix_sentence_endings=False, break_long_words=True, break_on_hyphens=True, placeholder=' [...]') -
Сжимает и усекает указанный 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'Изменено в версии 3.14: Теперь функция
dedent()правильно нормализует пустые строки, содержащие только пробельные символы. Ранее реализация нормализовала только пустые строки, содержащие табуляции и пробелы.
-
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 не установлено в 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) Если значение истинно, все символы табуляции в text будут преобразованы в пробелы с помощью методаexpandtabs()строки text.
-
tabsize -
(значение по умолчанию:
8) Еслиexpand_tabsимеет истинное значение, все символы табуляции в text будут преобразованы в ноль или более пробелов в зависимости от текущей позиции в строке и заданного размера табуляции.Добавлено в версии 3.3.
-
replace_whitespace -
(значение по умолчанию:
True) Если значение истинно, после преобразования табуляций, но до переноса методwrap()заменит каждый пробельный символ одним пробелом. Заменяются следующие пробельные символы: табуляция, перевод строки, вертикальная табуляция, перевод страницы и возврат каретки ('\t\n\v\f\r').Примечание
Если
expand_tabsимеет значение false, аreplace_whitespace— true, каждый символ табуляции будет заменён одним пробелом, что не равнозначно преобразованию табуляции.Примечание
Если
replace_whitespaceимеет значение false, символы перевода строки могут оказаться посреди строки и привести к неожиданному результату. Поэтому текст следует разбить на абзацы (например, с помощью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имеет значение false.Поскольку алгоритм определения предложений использует
string.lowercaseдля определения «строчной буквы» и опирается на принятую в английском языке условность ставить два пробела после точки для разделения предложений в одной строке, он подходит только для текстов на английском языке.
-
break_long_words -
(значение по умолчанию:
True) Если значение истинно, слова длиннееwidthбудут разбиваться, чтобы длина строк не превышалаwidth. Если значение false, длинные слова не будут разбиваться, и некоторые строки могут быть длиннееwidth. (Длинные слова будут помещаться в отдельную строку, чтобы свести к минимуму превышениеwidth.)
-
break_on_hyphens -
(значение по умолчанию:
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) -
Переносит единственный абзац в text и возвращает одну строку, содержащую перенесённый абзац.
-
© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/library/textwrap.html