Исходный код можно найти: 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()
.