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'
-
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) Если True, все символы табуляции в тексте будут преобразованы в пробелы с помощью методаexpandtabs()объекта текст.
-
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. Frankenstein's monster [...]
и «Скот.» в
[...] 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) -
Обрезает единственный абзац в тексте (строка), так что каждая строка имеет длину не более
widthсимволов. Все параметры обрезки берутся из атрибутов экземпляра объектаTextWrapper. Возвращает список выводимых строк без заключительных символов новой строки. Если выходной текст обрезки пуст, возвращаемый список пуст.
-
fill(text) -
Обрезает единственный абзац в тексте и возвращает строку, содержащую обрезанный абзац.
-
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/textwrap.html