python standard library textwrap

Python 标准库 之 textwrap

今天给大家介绍 python标准库中的 textwrap

参考文档

标准库 textwrap 是一个关于文本自动换行和填充的模块。

关于这个模块官网介绍如下:

textwrap 模块提供了一些快捷函数,以及可以完成所有工作的类 TextWrapper

如果你只是要对一两个文本字符串进行自动换行或填充,快捷函数应该就够用了;

否则的话,你应该使用 TextWrapper 的实例来提高效率。

函数

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

text (字符串) 中的单独段落自动换行以使每行长度最多为 width 个字符。 返回由输出行组成的列表,行尾不带换行符。

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

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

1
"\n".join(wrap(text, ...))
  • textwrap.shorten(text, width, kwargs)

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

  • textwrap.dedent(text)`

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

1
2
3
4
5
6
7
# end first line with \ to avoid the empty line!
s = '''\
hello
world
'''
print(repr(s)) # prints ' hello\n world\n '
print(repr(dedent(s))) # prints 'hello\n world\n'
  • textwrap.indent(text, prefix, predicate=None)`

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

通过调用 text.splitlines(True) 来对行进行拆分。

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

例如:

1
2
3
>>> s = 'hello\n\n \nworld'
>>> indent(s, ' ')
' hello\n\n \n world'

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

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

实例属性

  • width

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

  • expand_tabs

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

  • tabsize

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

  • replace_whitespace

    (default: True) 如果为真值,在制表符扩展之后、自动换行之前,wrap() 方法将把每个空白字符都替换为单个空格。 会被替换的空白字符如下:制表,换行,垂直制表,进纸和回车 ('\t\n\v\f\r')。注解 如果 expand_tabs 为假值且 replace_whitespace 为真值,每个制表符将被替换为单个空格,这与制表符扩展是 一样的。注解 如果 replace_whitespace 为假值,在一行的中间有可能出现换行符并导致怪异的输出。 因此,文本应当(使用 str.splitlines() 或类似方法)拆分为段落并分别进行自动换行。

  • drop_whitespace

    (默认: True) 如果为真值,每一行开头和末尾的空白字符(在包装之后、缩进之前)会被丢弃。 但是段落开头的空白字符如果后面不带任何非空白字符则不会被丢弃。 如果被丢弃的空白字符占据了一个整行,则该整行将被丢弃。

  • initial_indent

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

  • subsequent_indent

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

  • fix_sentence_endings

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

    (默认: ' [...]') 该文本将在输出文本被截短时出现在文本末尾。

公有方法

  • wrap(text)

    text (字符串) 中的单独段落自动换行以使每行长度最多为 width 个字符。 所有自动换行选项均获取自 TextWrapper 实例的实例属性。 返回由输出行组成的列表,行尾不带换行符。 如果自动换行输出结果没有任何内容,则返回空列表。

  • fill(text)

    text 中的单独段落自动换行并返回包含被自动换行段落的单独字符串。

具体实例

比如我想格式化一个文本,每一行要求输出的文字固定字符的长度30,就可以使用textwrap这个模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> from textwrap import wrap
>>>
>>> string = 'This is python programming language. One of its kind, it is also one of the most popular language in the world.'
>>>
>>> s = wrap(text = string, width = 30)
>>> print s
>>> ['This is python programming', 'language. One of its kind, it', 'is also one of the most', 'popular language in the world.']
>>>
>>>
>>> for i in s:
print i

This is python programming
language. One of its kind, it
is also one of the most
popular language in the world.
>>>
坚持原创技术分享,您的支持将鼓励我继续创作!