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
, документированные ниже. Обратите внимание, что пробел сжимается, прежде чем текст передан к функцииTextWrapper
fill()
, таким образом изменив значение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 и возвращает одну строку, содержащую обернутый абзац.
-