textwrap.md
1> **Источник:** https://python-all.ru/3.0/library/textwrap.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `textwrap` – Перенос и выравнивание текста89Модуль `textwrap` предоставляет две вспомогательные функции – [`wrap()`](https://python-all.ru/3.0/library/textwrap.html#textwrap.wrap) и [`fill()`](https://python-all.ru/3.0/library/textwrap.html#textwrap.fill), а также [`TextWrapper`](https://python-all.ru/3.0/library/textwrap.html#textwrap.TextWrapper) – класс, который делает всю работу, и служебную функцию [`dedent()`](https://python-all.ru/3.0/library/textwrap.html#textwrap.dedent). Если нужно перенести или заполнить одну-две текстовые строки, достаточно вспомогательных функций; в противном случае для эффективности лучше использовать экземпляр [`TextWrapper`](https://python-all.ru/3.0/library/textwrap.html#textwrap.TextWrapper).1011#### `[textwrap.wrap]textwrap.wrap(text[, width[, ...]])`1213Переносит один абзац в *text* (строке) так, чтобы каждая строка была длиной не более *width* символов. Возвращает список строк результата без завершающих символов новой строки.1415Необязательные именованные аргументы соответствуют атрибутам экземпляра [`TextWrapper`](https://python-all.ru/3.0/library/textwrap.html#textwrap.TextWrapper), описанным ниже. *width* по умолчанию равен `70`.1617#### `[textwrap.fill]textwrap.fill(text[, width[, ...]])`1819Обёртывает единственный абзац в *text* и возвращает одну строку, содержащую обёрнутый абзац. [`fill()`](https://python-all.ru/3.0/library/textwrap.html#textwrap.fill) – это сокращённая запись для2021```python22"\n".join(wrap(text, ...))23```2425В частности, [`fill()`](https://python-all.ru/3.0/library/textwrap.html#textwrap.fill) принимает те же именованные аргументы, что и [`wrap()`](https://python-all.ru/3.0/library/textwrap.html#textwrap.wrap).2627И [`wrap()`](https://python-all.ru/3.0/library/textwrap.html#textwrap.wrap), и [`fill()`](https://python-all.ru/3.0/library/textwrap.html#textwrap.fill) работают, создавая экземпляр [`TextWrapper`](https://python-all.ru/3.0/library/textwrap.html#textwrap.TextWrapper) и вызывая на нём один метод. Этот экземпляр не переиспользуется, поэтому для приложений, которые переносят/заполняют много текстовых строк, будет эффективнее создать собственный объект [`TextWrapper`](https://python-all.ru/3.0/library/textwrap.html#textwrap.TextWrapper).2829Текст предпочтительно переносится по пробелам и сразу после дефисов в составных словах; только в этом случае длинные слова будут разбиты при необходимости, если [`TextWrapper.break_long_words`](https://python-all.ru/3.0/library/textwrap.html#textwrap.TextWrapper.break_long_words) не установлено в false.3031Дополнительная служебная функция [`dedent()`](https://python-all.ru/3.0/library/textwrap.html#textwrap.dedent) предназначена для удаления отступов из строк, содержащих нежелательные пробелы слева от текста.3233#### `[textwrap.dedent]textwrap.dedent(text)`3435Удаляет общие начальные пробельные символы из каждой строки в *text*.3637Это можно использовать, чтобы выровнять строки с тройными кавычками по левому краю отображения, при этом в исходном коде они остаются с отступами.3839Обратите внимание, что табуляции и пробелы оба считаются пробельными символами, но они не равны: строки `" hello"` и `"\thello"` считаются не имеющими общего начального пробела.4041Например:4243```python44def test():45 # завершите первую строку символом \, чтобы избежать пустой строки46 s = '''\47 hello48 world49 '''50 print(repr(s)) # выводит ' hello\n world\n '51 print(repr(dedent(s))) # выводит 'hello\n world\n'52```5354#### `[textwrap.TextWrapper]class textwrap.TextWrapper(...)`5556Конструктор [`TextWrapper`](https://python-all.ru/3.0/library/textwrap.html#textwrap.TextWrapper) принимает ряд необязательных именованных аргументов. Каждый аргумент соответствует атрибуту экземпляра, так, например5758```python59wrapper = TextWrapper(initial_indent="* ")60```6162это то же самое, что6364```python65wrapper = TextWrapper()66wrapper.initial_indent = "* "67```6869Можно повторно использовать один и тот же объект [`TextWrapper`](https://python-all.ru/3.0/library/textwrap.html#textwrap.TextWrapper) много раз, и между использованиями можно изменять любые его параметры прямым присваиванием атрибутам экземпляра.7071Атрибуты экземпляра [`TextWrapper`](https://python-all.ru/3.0/library/textwrap.html#textwrap.TextWrapper) (и именованные аргументы конструктора) следующие:7273#### `[textwrap.TextWrapper.width]width`7475(по умолчанию:7677`70`7879) Максимальная длина переносимых строк. Пока во входном тексте нет отдельных слов длиннее8081[`width`](https://python-all.ru/3.0/library/textwrap.html#textwrap.TextWrapper.width)8283,8485[`TextWrapper`](https://python-all.ru/3.0/library/textwrap.html#textwrap.TextWrapper)8687гарантирует, что ни одна строка вывода не будет длиннее8889[`width`](https://python-all.ru/3.0/library/textwrap.html#textwrap.TextWrapper.width)9091символов.9293#### `[textwrap.TextWrapper.expand_tabs]expand_tabs`9495(по умолчанию:9697`True`9899) Если истинно, то все символы табуляции в100101*text*102103будут заменены на пробелы с использованием метода104105`expandtabs()`106107строки108109*text*110111.112113#### `[textwrap.TextWrapper.replace_whitespace]replace_whitespace`114115(по умолчанию: `True`) Если истина, каждый пробельный символ (по определению `string.whitespace`), оставшийся после замены табуляции, будет заменён на один пробел.116117> **Примечание**118>119> Если [`expand_tabs`](https://python-all.ru/3.0/library/textwrap.html#textwrap.TextWrapper.expand_tabs) ложно, а [`replace_whitespace`](https://python-all.ru/3.0/library/textwrap.html#textwrap.TextWrapper.replace_whitespace) истинно, то каждый символ табуляции будет заменён одним пробелом, что *не* то же самое, что замена табуляции.120121#### `[textwrap.TextWrapper.drop_whitespace]drop_whitespace`122123(по умолчанию:124125`True`126127) Если истина, пробелы, которые после переноса оказываются в начале или конце строки, удаляются (однако начальные пробелы в первой строке всегда сохраняются).128129#### `[textwrap.TextWrapper.initial_indent]initial_indent`130131(по умолчанию:132133`''`134135) Строка, которая будет добавлена в начало первой строки вывода после переноса. Учитывается при подсчёте длины первой строки.136137#### `[textwrap.TextWrapper.subsequent_indent]subsequent_indent`138139(по умолчанию:140141`''`142143) Строка, которая будет добавлена ко всем строкам перенесённого вывода, кроме первой. Учитывается в длине каждой строки, кроме первой.144145#### `[textwrap.TextWrapper.fix_sentence_endings]fix_sentence_endings`146147(по умолчанию: `False`) Если true, [`TextWrapper`](https://python-all.ru/3.0/library/textwrap.html#textwrap.TextWrapper) пытается обнаружить концы предложений и гарантировать, что предложения всегда разделяются ровно двумя пробелами. Обычно это желательно для текста моноширинным шрифтом. Однако алгоритм обнаружения предложений несовершенен: он предполагает, что конец предложения состоит из строчной буквы, за которой следует один из `'.'`, `'!'` или `'?'`, возможно, за которым следует один из `'"'` или `"'"`, за которым следует пробел. Одна из проблем этого алгоритма заключается в том, что он не может различить «Dr.» в148149```python150[...] Dr. Frankenstein's monster [...]151```152153и «Spot.» в154155```python156[...] See Spot. See Spot run [...]157```158159[`fix_sentence_endings`](https://python-all.ru/3.0/library/textwrap.html#textwrap.TextWrapper.fix_sentence_endings) по умолчанию false.160161Поскольку алгоритм обнаружения предложений полагается на `string.lowercase` для определения «строчной буквы» и соглашение об использовании двух пробелов после точки для разделения предложений на одной строке, он применим только к текстам на английском языке.162163#### `[textwrap.TextWrapper.break_long_words]break_long_words`164165(по умолчанию:166167`True`168169) Если true, то слова длиннее170171[`width`](https://python-all.ru/3.0/library/textwrap.html#textwrap.TextWrapper.width)172173будут разрываться, чтобы гарантировать, что ни одна строка не длиннее174175[`width`](https://python-all.ru/3.0/library/textwrap.html#textwrap.TextWrapper.width)176177. Если false, длинные слова не будут разрываться, и некоторые строки могут оказаться длиннее178179[`width`](https://python-all.ru/3.0/library/textwrap.html#textwrap.TextWrapper.width)180181. (Длинные слова будут помещаться на отдельную строку, чтобы минимизировать превышение182183[`width`](https://python-all.ru/3.0/library/textwrap.html#textwrap.TextWrapper.width)184185.)186187#### `[textwrap.TextWrapper.break_on_hyphens]break_on_hyphens`188189(по умолчанию:190191`True`192193) Если true, перенос будет выполняться предпочтительно по пробелам и сразу после дефисов в составных словах, как это принято в английском языке. Если false, только пробелы будут считаться потенциально хорошими местами для разрыва строк, но необходимо установить194195[`break_long_words`](https://python-all.ru/3.0/library/textwrap.html#textwrap.TextWrapper.break_long_words)196197в false, если требуются действительно неразрывные слова. Поведение по умолчанию в предыдущих версиях заключалось в том, чтобы всегда разрешать разрыв слов с дефисом.198199[`TextWrapper`](https://python-all.ru/3.0/library/textwrap.html#textwrap.TextWrapper) также предоставляет два открытых метода, аналогичных модульным удобным функциям:200201#### `[textwrap.TextWrapper.wrap]wrap(text)`202203Переносит один абзац из204205*text*206207(строки) так, чтобы каждая строка была не длиннее208209[`width`](https://python-all.ru/3.0/library/textwrap.html#textwrap.TextWrapper.width)210211символов. Все параметры переноса берутся из атрибутов экземпляра212213[`TextWrapper`](https://python-all.ru/3.0/library/textwrap.html#textwrap.TextWrapper)214215. Возвращает список строк вывода без завершающих символов новой строки.216217#### `[textwrap.TextWrapper.fill]fill(text)`218219Заворачивает один абзац в220221*текст*222223и возвращает одну строку, содержащую завернутый абзац.224