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