python textwrap module

作用

通过调整换行符在段落中出现的位置来格式化文本。

源码: Lib/textwrap.py

用法

textwrap 模块提供了一些快捷函数,以及可以完成所有工作的类 TextWrapper。 如果你只是要对一两个文本字符串进行自动换行或填充,快捷函数应该就够用了;否则的话,你应该使用 TextWrapper 的实例来提高效率。定义方法如下:

1
2
3
>>> import textwrap		
>>> textwrap.__all__
['TextWrapper', 'wrap', 'fill', 'dedent', 'indent', 'shorten']

textwrap.wrap(text, width=70, **kwargs)

将text(字符串)以指定宽度(width,默认70字符)字符进行拆分,以序列的形式返回拆分后的结果,行尾不带换行符。

1
2
3
4
5
6
>>> import textwrap	
>>> textwrap.wrap(text, 70)
['As we hugged Ruth good-bye she said to me with tears glistening in her', 'eyes, “The day you called I was still in bed. I had just finished', 'praying. I asked God if it would be possible to have some Christmas', 'Carolers come to my home and sing this year. Thank you for being the', 'answer to my Christmas prayer.']

>>> len('As we hugged Ruth good-bye she said to me with tears glistening in her')
70

textwrap.fill(text, width=70, **kwargs)

text 中的单独段落自动换行,并返回一个包含被自动换行段落的单独字符串。 fill() 是以下语句的快捷方式

1
"\n".join(wrap(text, ...))
1
2
3
>>> textwrap.fill(text, 70)     
'As we hugged Ruth good-bye she said to me with tears glistening in her\neyes, “The day you called I was still in bed. I had just finished\npraying. I asked God if it would be possible to have some Christmas\nCarolers come to my home and sing this year. Thank you for being the\nanswer to my Christmas prayer.'
>>>

textwrap.shorten(text, width, **kwargs)

折叠并截短给定的 text 以符合给定的 width

首先将折叠 text 中的空格(所有连续空格替换为单个空格)。 如果结果能适合 width 则将其返回。 否则将丢弃足够数量的末尾单词以使得剩余单词加 placeholder 能适合 width:

1
2
3
4
5
6
7
8
>>> textwrap.shorten('Hello    world', 11)
'Hello world'

>>> textwrap.shorten('Hello world!', 11)
'Hello [...]'

>>> textwrap.shorten('Hello world', 8, placeholder='...')
'Hello...'

textwrap.dedent(text)

移除 text 中每一行的任何相同前缀空白符。

1
2
>>> textwrap.dedent('  hello  world')
'hello world'

textwrap.indent(text, prefix, predicate=None)

prefix 添加到 text 中选定行的开头。

默认情况下,prefix 会被添加到所有不是只由空白符(包括任何行结束符)组成的行。

1
2
3
4
5
>>> textwrap.indent('hello\nworld', '  ')  
' hello\n world'
>>> print(textwrap.indent('hello\nworld', ' '))
hello
world

可选的 predicate 参数可用来控制哪些行要缩进。 例如,可以很容易地为空行或只有空白符的行添加 prefix:

1
2
3
4
5
>>> print(indent(s, '+ ', lambda line: True))
+ hello
+
+
+ world

class textwrap.TextWrapper(**kwargs)

TextWrapper构造器接受多个可选的关键字参数。 每个关键字参数对应一个实例属性,比如说

1
wrapper = TextWrapper(initial_indent="* ")

就相当于

1
2
wrapper = TextWrapper()
wrapper.initial_indent = "* "

你可以多次重用相同的 TextWrapper对象,并且你也可以在使用期间通过直接向实例属性赋值来修改它的任何选项。

TextWrapper 的实例属性(以及构造器的关键字参数)如下所示:

  • width –> (默认: 70) 自动换行的最大行长度。 只要输入文本中没有长于 width 的单个单词,TextWrapper 就能保证没有长于 width 个字符的输出行。

  • expand_tabs –> (默认: True) 如果为真值,则 text 中所有的制表符将使用 text 的 expandtabs() 方法扩展为空格符。

  • tabsize –> (默认: 8) 如果 expand_tabs 为真值,则 text 中所有的制表符将扩展为零个或多个空格,具体取决于当前列位置和给定的制表宽度。

  • replace_whitespace –> (default: True) 如果为真值,在制表符扩展之后、自动换行之前,wrap() 方法将把每个空白字符都替换为单个空格。 会被替换的空白字符如下:制表,换行,垂直制表,进纸和回车 (‘\t\n\v\f\r’)。

    1
    2
    3
    注解: 
    如果 expand_tabs 为假值且 replace_whitespace 为真值,每个制表符将被替换为单个空格,这与制表符扩展是 不 一样的。
    如果 replace_whitespace 为假值,在一行的中间有可能出现换行符并导致怪异的输出。 因此,文本应当(使用 str.splitlines() 或类似方法)拆分为段落并分别进行自动换行。
  • drop_whitespace –> (默认: True) 如果为真值,每一行开头和末尾的空白字符(在包装之后、缩进之前)会被丢弃。 但是段落开头的空白字符如果后面不带任何非空白字符则不会被丢弃。 如果被丢弃的空白字符占据了一个整行,则该整行将被丢弃。

  • initial_indent –> (默认: '') 将被添加到被自动换行输出内容的第一行的字符串。 其长度会被计入第一行的长度。 空字符串不会被缩进。

  • subsequent_indent –> (default: '') 将被添加到被自动换行输出内容除第一行外的所有行的字符串。 其长度会被计入除行一行外的所有行的长度。

  • fix_sentence_endings –> (默认: False) 如果为真值,TextWrapper 将尝试检测句子结尾并确保句子间总是以恰好两个空格符分隔。 对于使用等宽字体的文本来说通常都需要这样。 但是,句子检测算法并不完美:它假定句子结尾是一个小写字母加字符 '.', '!''?' 中的一个,并可能带有字符 '"'"'",最后以一个空格结束。 此算法的问题之一是它无法区分以下文本中的 “Dr.”

    由于句子检测算法依赖于 string.lowercase 来确定“小写字母”,以及约定在句点后使用两个空格来分隔处于同一行的句子,因此只适用于英语文本。

  • break_long_words –> (默认: True) 如果为真值,则长度超过 width 的单词将被分开以保证行的长度不会超过 width。 如果为假值,超长单词不会被分开,因而某些行的长度可能会超过 width。 (超长单词将被单独作为一行,以尽量减少超出 width 的情况。)

  • break_on_hyphens –> (默认: True) 如果为真值,将根据英语的惯例首选在空白符和复合词的连字符之后自动换行。 如果为假值,则只有空白符会被视为合适的潜在断行位置,但如果你确实不希望出现分开的单词则你必须将 break_long_words 设为假值。 之前版本的默认行为总是允许分开带有连字符的单词。

  • max_lines –> (默认: None) 如果不为 None,则输出内容将最多包含 max_lines 行,并使 placeholder 出现在输出内容的末尾。

  • placeholder –> (默认: ‘ […]’) 该文本将在输出文本被截短时出现在文本末尾。

-------------本文结束感谢您的阅读-------------