📜  Textwrap – Python中的文本换行和填充

📅  最后修改于: 2022-05-13 01:55:24.719000             🧑  作者: Mango

Textwrap – Python中的文本换行和填充

textwrap 模块可用于对纯文本进行换行和格式化。该模块通过调整输入段落中的换行符来提供文本格式。

TextWrapper 实例属性(和构造函数的关键字参数)如下:

  • 宽度:这是指换行线允许的最大长度。它的默认值设置为 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:它的默认值设置为''。此方法将给定的字符串添加到包装输出的第一行。
  • 随后的缩进:它的默认值设置为''。此方法将给定字符串添加到除第一行之外的所有包装输出行。
  • 占位符:它的默认值设置为“[…]”。如果字符串被截断,此方法会将字符串附加到输出文本的末尾。
  • max_lines:它的默认值设置为无。如果该值不是 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."""
      
    # Wrap this text.
    wrapper = textwrap.TextWrapper(width=50)
      
    word_list = wrapper.wrap(text=value)
      
    # Print each line.
    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."""
      
    # Wrap this text.
    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