📜  Textwrap – Python中的文本环绕和填充

📅  最后修改于: 2020-04-16 13:25:33             🧑  作者: Mango

textwrap模块可用于包装和格式化纯文本。该模块通过调整输入段落中的换行符来提供文本格式。
TextWrapper实例属性(以及构造函数的关键字参数)如下:

  • width:这是指换行允许的最大长度。它的默认值设置为70。
  • expand_tabs:它的默认值设置为TRUE。如果该值等于true,则使用此方法将示例输入中的所有制表符扩展为空格。
  • tabsize:默认值设置为8。如果expand_tabs的值为TRUE,则此方法会将文本中的所有制表符扩展为零个或多个空格,具体取决于当前列和给定的制表符大小。
  • replace_whitespace:默认值为TRUE。如果值为true,则在制表符扩展之后但在包装之前,将wrap()方法用一个空格替换每个空白字符。这些空白字符被替换为:制表符,换行符,垂直制表符,换页符和回车符(‘\ t \ n \ v \ f \ r’)。
  • drop_whitespace:默认值为TRUE。如果将值设置为TRUE,则会删除每行开头和结尾(在换行后但在缩进之前)的空格。
  • initial_indent:默认值设置为”。此方法将给定的字符串放在包装输出的第一行之前。
  • following_indent:它的默认值设置为”。此方法将给定的字符串添加到除第一行外的所有已包装输出行中。
  • placeholder:它的默认值设置为'[…]’。如果字符串被截断,则此方法将字符串附加在输出文本的末尾。
  • max_lines:它的默认值设置为None。如果该值不为None,则输出文本最多包含max_lines行,在输出末尾具有占位符。
  • break_long_words:它的默认值设置为True。如果为TRUE,则折断长于宽度的单词以适合给定宽度的每一行。如果为FALSE,则长字不会被打乱,而是将它们自己放在一行上,以最小化超出宽度的数量。
  • break_on_hyphens:它的默认值设置为True。如果该值等于TRUE,则会在空白处以及复合词中的连字符后立即进行换行。如果该值等于FALSE,则仅在空白处出现换行符,但是如果您想要真正不安全的单词,则需要将break_long_words设置为FALSE。

Textwrap模块提供的功能:
1.textwrap.wrap(text,width = 70,** kwargs):此函数包装输入的段落,使段落中的每一行最多为宽度字符。wrap方法返回输出行列表。如果包装的输出没有内容,则返回的列表为空。默认宽度为70。

import textwrap
value = """This function wraps the input paragraph such that each line
in the paragraph is at most width characters long. The wrap method
returns a list of output lines. The returned list
is empty if the wrapped
output has no content."""
# 换行.
wrapper = textwrap.TextWrapper(width=50)
word_list = wrapper.wrap(text=value)
# 打印每一行.
for element in word_list:
    print(element)

输出:

This function wraps the input paragraph such that
each line in the paragraph is at most width
characters long. The wrap method returns a list of
output lines. The returned list is empty if the
wrapped output has no content.

2.textwrap.fill(text,width = 70,** kwargs): fill()便捷函数的工作方式类似于textwrap.wrap,不同之处在于它将返回的数据返回到一个用换行符分隔的单个字符串中。此函数将输入的单个段落包装为文本,并返回包含被包装的段落的单个字符串。

import textwrap
value = """This function returns the answer as STRING and not LIST."""
# 换行.
wrapper = textwrap.TextWrapper(width=50)
string = wrapper.fill(text=value)
print (string)

输出:

This function returns the answer as STRING and not LIST.

3. textwrap.dedent(text):此函数用于从输入文本的每一行中删除任何常见的前导空白。这允许使用文档字符串或嵌入的多行字符串与显示的左边缘对齐,同时删除代码本身的格式。
范例: 

import textwrap
wrapper = textwrap.TextWrapper(width=50)
s = '''\
    hello
      world
    '''
print(repr(s)) # prints '    hello\n      world\n    '
text = textwrap.dedent(s)
print(repr(text)) # prints 'hello\n  world\n'

输出: 

'    hello\n      world\n    '
'hello\n  world\n'

 4,textwrap.shorten(text,width,** kwargs):此函数会截断输入字符串,以使字符串的长度等于给定的宽度。首先,通过用单个空格删除空格将所有空格折叠在字符串中。如果修改后的字符串适合给定的字符串,则返回修改后的字符串,否则将丢弃末尾的字符,以便其余单词加上占位符适合宽度。 

import textwrap
sample_text = """This function wraps the input paragraph such that each line
n the paragraph is at most width characters long. The wrap method
returns a list of output lines. The returned list
is empty if the wrapped
output has no content."""
wrapper = textwrap.TextWrapper(width=50)
dedented_text = textwrap.dedent(text=sample_text)
original = wrapper.fill(text=dedented_text)
print('Original:\n')
print(original)
shortened = textwrap.shorten(text=original, width=100)
shortened_wrapped = wrapper.fill(text=shortened)
print('\nShortened:\n')
print(shortened_wrapped)

输出: 

Original:
This function wraps the input paragraph such that
each line n the paragraph is at most width
characters long. The wrap method returns a list of
output lines. The returned list is empty if the
wrapped output has no content.
Shortened:
This function wraps the input paragraph such that
each line n the paragraph is at most width [...]

 5,textwrap.indent(text,prefix,predicate = None):此函数用于将给定的前缀添加到所选文本行的开头。谓词参数可用于控制缩进的行。 

import textwrap
s = 'hello\n\n \nworld'
s1 = textwrap.indent(text=s, prefix=' ')
print (s1)
print ("\n")
s2 = textwrap.indent(text=s, prefix='+ ', predicate=lambda line: True)
print (s2)

输出: 

hello
world
+ hello
+
+
+ world