Исходный код можно найти: Lib/textwrap.py
Модуль textwrap
может использоваться для форматирования текста в ситуациях, когда требуется красивая печать. Он предлагает функциональность, аналогичную функциям заполнения абзацев, которые можно найти во многих текстовых редакторах и текстовых процессорах.
В примерах будет использоваться следующий текст:
text = ''' Модуль `textwrap` может использоваться для форматирования текста в ситуациях, когда требуется красивая печать. Он предлагает функциональность, которую можно найти в текстовых редакторах. '''
Функция textwrap.fill()
принимает текст в качестве входных данных и возвращает отформатированный текст.
import textwrap as tw print(tw.fill(text, width=50)) # Модуль `textwrap` может использоваться для # форматирования текста в ситуациях, когда # требуется красивая печать. Он предлагает # функциональность, которую можно найти в текстовых # редакторах.
Текст выравнивается по левому краю, первая строка сохраняет свой отступ, а пробелы в начале каждой последующей строки вставляются в абзац.
Удаление общего префикса пробела из всех строк в тексте образца функцией textwrap.dedent()
приводит к лучшим результатам и позволяет использовать многострочные строки прямо из кода Python, удаляя при этом форматирование самого кода.
import textwrap as tw print(tw.dedent(text)) # Модуль `textwrap` может использоваться для форматирования # текста в ситуациях, когда требуется красивая печать. Он предлагает # функциональность, которую можно найти в текстовых редакторах.
Так как dedent()
является противоположностью indent()
, результатом является блок текста с общим начальным пробелом из каждой строки. Если одна строка уже имеет отступ больше другой, часть пробела не будет удалена, например
# Было ␣Line one. ␣␣␣Line two. ␣Line three. # Станет Line one. ␣␣Line two. Line three.
Текст с отступами может быть передан textwrap.fill()
с несколькими различными width
значениями.
import textwrap as tw dedented_text = tw.dedent(text).strip() for width in [50, 70]: print('=> {} Columns:'.format(width)) print(tw.fill(dedented_text, width=width)) print() # => 50 Columns: # Модуль `textwrap` может использоваться для # форматирования текста в ситуациях, когда требуется # красивая печать. Он предлагает функциональность, # которую можно найти в текстовых редакторах. # => 70 Columns: # Модуль `textwrap` может использоваться для форматирования текста в # ситуациях, когда требуется красивая печать. Он предлагает # функциональность, которую можно найти в текстовых редакторах.
Используйте функцию textwrap.indent()
, чтобы добавить текст префикса ко всем строкам в параграфе. В этом примере форматируется текст, с использованием префикса >
для каждой строки.
import textwrap as tw dedented_text = tw.dedent(text) wrap = tw.fill(dedented_text, width=50) final = tw.indent(wrap, '> ') print(final) # > Модуль `textwrap` может использоваться для # > форматирования текста в ситуациях, когда требуется # > красивая печать. Он предлагает функциональность, # > которую можно найти в текстовых редакторах
Блок текста разбивается на новые строки, префикс добавляется к каждой строке, содержащей текст, а затем строки объединяются обратно в новую строку и возвращаются.
Чтобы контролировать, какие строки получают новый префикс, передадим объект в качестве predicate
аргумента функции textwrap.indent()
. Этот объект будет вызываться для каждой строки текста по очереди, а префикс будет добавляться для строк, в которых возвращаемое значение равно True
.
import textwrap as tw def my_indent(line): return line.startswith(' ') dedented_text = tw.dedent(text) wrap = tw.fill(dedented_text, width=65) final = tw.indent(wrap, '> ', predicate=my_indent) print(final) # > Модуль `textwrap` может использоваться для форматирования текста # в ситуациях, когда требуется красивая печать. Он предлагает # функциональность, которую можно найти в текстовых редакторах.
Отступ первой строки можно контролировать независимо от последующих строк. Это позволяет создать висячий отступ, где первая строка имеет отступ меньше, чем другие строки.
import textwrap as tw dedented_text = tw.dedent(text).strip() print(tw.fill(dedented_text, initial_indent='', subsequent_indent=' ' * 4, width=60)) # Модуль `textwrap` может использоваться для форматирования # текста в ситуациях, когда требуется красивая печать. Он # предлагает функциональность, которую можно найти в # текстовых редакторах.
Значения отступа могут включать и непробельные символы.
Чтобы обрезать текст для создания сводки или предварительного просмотра, будем использовать функцию shorten()
модуля textwrap
. Все существующие пробелы, такие как табуляция, новые строки и серии из нескольких пробелов, будут стандартизированы в один пробел. Затем текст будет обрезан до длины, меньшей или равной запрошенной, между границами слов, чтобы не было частичных слов.
import textwrap as tw dedented_text = tw.dedent(text) short = tw.shorten(dedented_text, 100) short_wrap = tw.fill(short, width=60) print(short_wrap) # Модуль `textwrap` может использоваться для форматирования # текста в ситуациях, когда требуется [...]
Если текст без пробелов удаляется из исходного текста как часть усечения, он заменяется значением заполнителя. Значение по умолчанию [...]
можно заменить, указав аргумент placeholder
для функции shorten()
.