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=' [...]')¶ Обертывает единственный абзац в текст (строку) так, что каждая строка имеет длину не более ширины символов. Возвращает список выводимых строк без заключительных новых строк.
Необязательные аргументы ключевых слов соответствуют атрибутам экземпляра
TextWrapper, документированным ниже.Дополнительные сведения о поведении метода
TextWrapper.wrap()см. в методе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=' [...]')¶ Свернуть и усечь заданный текст, чтобы он поместился в заданную ширину.
Сначала пробельные символы в тексте сворачиваются (все пробельные символы заменяются одиночными пробелами). Если результат помещается в ширину, он возвращается. В противном случае с конца отбрасывается достаточное количество слов, чтобы оставшиеся слова плюс
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)¶ Удалите все общие пробельные символы из каждой строки текста.
Это можно использовать для того, чтобы строки, заключенные в тройные кавычки, выравнивались по левому краю экрана, а в исходном коде были представлены с отступом.
Обратите внимание, что табуляция и пробелы рассматриваются как пробельные символы, но они не равны: считается, что строки
" 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)¶ Добавить префикс к началу выделенных строк в тексте.
Строки разделяются вызовом
text.splitlines(True).По умолчанию prefix добавляется ко всем строкам, которые состоят не только из пробельных символов (включая любые окончания строк).
Например:
>>> s = 'hello\n\n \nworld' >>> indent(s, ' ') ' hello\n\n \n world'
Необязательный аргумент предикат можно использовать для управления тем, какие строки будут отступать. Например, легко добавить предикат даже к пустым строкам и строкам, содержащим только пробельные символы:
>>> 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ложно, аreplace_whitespaceистинно, каждый символ табуляции будет заменен одним пробелом, что не то же самое, что расширение табуляции.Примечание
Если
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)¶ Обертывает единственный абзац в текст (строку) так, чтобы каждая строка была не более
widthсимволов. Все параметры обертки берутся из атрибутов экземпляраTextWrapper. Возвращает список строк вывода без заключительных новых строк. Если обернутый вывод не имеет содержимого, возвращаемый список будет пустым.
-
fill(text)¶ Обертывает один абзац в текст и возвращает одну строку, содержащую обернутый абзац.
-