textwrap — Обертывание и заполнение текста¶
Исходный код: Lib/textwrap.py
Модуль textwrap предоставляет некоторые удобные функции, а также
класс TextWrapper, который выполняет всю работу. Если вы просто упаковываете
или заполняете один или два текстовых строки, функции удобства должны быть
достаточно хорошими; в противном случае для эффективности следует использовать
сущность TextWrapper.
-
textwrap.wrap(text, width=70, **kwargs)¶ Помещает отдельный абзац в text (строка), поэтому длина каждой строки не превышает width символов. Возвращает список выходных строк без символов завершения строк.
Дополнительные ключевые аргументы соответствуют атрибутам сущности
TextWrapper, документированного ниже. По умолчанию width к70.Дополнительные сведения о поведении
TextWrapper.wrap()см. в методе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(): # завершить первую строку \, чтобы избежать пустой строки! 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, '+ ', lambd 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, то все символы табуляции в text будут расширены до нуля или более пробелов в зависимости от текущего столбца и заданного размера табуляции.Добавлено в версии 3.3.
-
replace_whitespace¶ (по умолчанию:
True) если значение равно true, то после развертывания табы, но перед переносом, методwrap()заменяет каждый символ пробела единым пробелом. Заменяются следующие символы пробела: tab, newline, vertical tab, formfeed и возвращение каретки ('\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 [...]
и «Пятно.» в:
[...] See Spot. See Spot run [...]
По умолчанию
fix_sentence_endingsимеет значение false.Поскольку алгоритм обнаружения предложений опирается на
string.lowercaseдля определения «строчной буквы», и соглашение об использовании двух пробелов через период для разделения предложений в одной строке, оно специфично для англоязычных текстов.
-
break_long_words¶ (по умолчанию:
True) если true, то слова длиннееwidthбудут разбиты, чтобы гарантировать, что ни одна строка не длиннееwidth. Если это ложь, длинные слова не будут разбиты, а некоторые строки могут быть длиннееwidth. (Длинные слова будут поставлены на строку сами по себе, чтобы минимизировать сумму, на которуюwidthпревышен.)
-
break_on_hyphens¶ (по умолчанию:
True) если true, обертка будет выполняться предпочтительно в белых пространствах и сразу после дефисов составными словами, как это принято в английском языке. Если значение равно false, в качестве потенциально хороших мест для разрывов строк будут рассматриваться только пробелы, но если вам нужны действительно незащищенные слова, необходимо установить значение false дляbreak_long_words. Поведение по умолчанию в предыдущих версиях должно было всегда разрешать разрыв слов с переносами.
-
max_lines¶ (по умолчанию:
None) если неNone, то вывод будет содержать не более max_lines строк, причем placeholder появится в конце вывода.Добавлено в версии 3.4.
-
placeholder¶ (по умолчанию:
' [...]') строка, которая появится в конце выходного текста, если он был усечен.Добавлено в версии 3.4.
TextWrapperтакже предоставляет некоторые публичные методы, аналогичные удобным функциям на уровне модулей:-
wrap(text)¶ Помещает отдельный абзац в text (строка), поэтому длина каждой строки не превышает
widthсимволов. Все варианты обертки взяты из сущность атрибутыTextWrapperсущность. Возвращает список выходных строк без окончательных новых строк. Если упакованный вывод не содержит содержимого, список возвращенный пуст.
-
fill(text)¶ Обёртывает один абзац в text и возвращает одну строку, содержащую обернутый абзац.
-
