textwrap模块提供了一些便利功能,以及TextWrapper完成所有工作的类。如果您只是包装或填充一两个文本字符串,那么便利功能应该足够好;否则,您应该使用 的实例 TextWrapper来提高效率。

textwrap.wrap(textwidth=70, **kwargs)
将单个段落包装在文本(字符串)中,因此每行最多为 宽度字符长。返回输出行列表,没有最终换行符。

可选关键字参数对应于 的实例属性 TextWrapper,如下所述。 宽度默认为70.

TextWrapper.wrap()有关行为方式的更多详细信息, 请参见方法wrap()

textwrap.fill(textwidth=70**kwargs)
将单个段落包裹在text中,并返回包含包裹段落的单个字符串。 fill()是简写

"\n".join(wrap(text, ...))
特别是,fill()接受与 . 完全相同的关键字参数 wrap()
textwrap.shorten(textwidth**kwargs)
折叠并截断给定的文本以适应给定的宽度

首先,文本中的空格被折叠(所有空格都被单个空格替换)。如果结果适合width,则返回。否则,从末尾删除足够的单词,以便剩余的单词加上placeholder适合范围width

>>>
>>> textwrap.shorten("Hello  world!", width=12)
'Hello world!'
>>> textwrap.shorten("Hello  world!", width=11)
'Hello [...]'
>>> textwrap.shorten("Hello world", width=10, placeholder="...")
'Hello...'
可选关键字参数对应于 的实例属性 TextWrapper,如下所述。请注意,在将文本传递给 函数之前,空格已折叠,因此更改 、 、 和 的值将 无效。TextWrapper fill()tabsizeexpand_tabsdrop_whitespacereplace_whitespace

3.4 版中的新功能。

textwrap.dedent(text)
从text的每一行中删除任何常见的前导空格。

这可用于使三引号字符串与显示的左边缘对齐,同时仍以缩进形式在源代码中显示它们。

请注意,制表符和空格都被视为空格,但它们不相等:行和被认为没有共同的前导空格。"  hello""\thello"

仅包含空格的行在输入中被忽略,并在输出中标准化为单个换行符。

例如:

def test(): 
    # 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(textprefixpredicate=None)

在text中选定行的开头添加前缀

行通过调用分隔text.splitlines(True)

默认情况下,前缀被添加到不完全由空格组成的所有行(包括任何行尾)。

例如:

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

可选的谓词参数可用于控制缩进的行。例如,很容易为偶数空行和仅空白行添加前缀

>>>
>>> print(indent(s, '+ ', lambda line: True))
+ hello
+
+
+ world

版本3.3中的新功能。

wrap()fill()shorten()通过创建 TextWrapper实例并在其上调用单个方法来工作。该实例不会被重用,因此对于使用wrap()和/或处理许多文本字符串的应用程序,fill()创建自己的TextWrapper对象可能更有效。

文本最好包含在空格上,紧跟连字符后的连字符; 只有这样才能在必要时破坏长词,除非TextWrapper.break_long_words设置为假。

class textwrap.TextWrapper(**kwargs)
TextWrapper构造函数接受多种可选关键字参数。每个关键字参数对应一个实例属性,例如

wrapper = TextWrapper(initial_indent="* ")

是相同的

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

您可以TextWrapper多次重复使用同一个对象,并且可以通过在使用之间直接分配给实例属性来更改其任何选项。

TextWrapper是实例属性(和关键字参数构造函数),如下所示:

width
(默认值:70)包装线的最大长度。只要输入文本中没有单个单词长度width, TextWrapper就可以保证输出行不会长于 width字符。
expand_tabs
(默认值:True)如果为真,那么在所有的制表符的文本将扩大使用空间expandtabs()的方法文本
tabsize
(默认值:8)如果expand_tabs为true,则文本中的所有制表符将扩展为零或更多空格,具体取决于当前列和给定的制表符大小。

版本3.3中的新功能。

replace_whitespace
(默认值:True)如果为true,则在制表符扩展之后但在换行之前,该wrap()方法将使用单个空格替换每个空格字符。替换的空白字符如下:tab,newline,vertical tab,formfeed和carriage return('\t\n\v\f\r')。

注意

如果expand_tabs为假,并且replace_whitespace是真实的,每个选项卡字符将通过一个单一的空间,这是被替换 一样制表符扩展。

注意

如果replace_whitespace为false,则换行符可能出现在行的中间并导致奇怪的输出。因此,文本应分为段落(使用str.splitlines()或类似),它们分别包装。

drop_whitespace
(默认值:True)如果为true,则删除每行开头和结尾处的空格(包装后但在缩进之前)。但是,如果非空格跟在其后面,则段落开头的空格不会被删除。如果丢弃的空格占用整行,则整行都被删除。
initial_indent
(默认值:'')将被添加到包装输出的第一行的字符串。计算第一行的长度。空字符串不缩进。
subsequent_indent
(默认值:'')将被添加到除第一行之外的所有换行输出行的字符串。计算除第一行之外的每一行的长度。
fix_sentence_endings
(默认值:) False如果为true,则TextWrapper尝试检测句子结尾并确保句子总是由两个空格分隔。对于等宽字体的文本,通常需要这种方法。然而,这句话检测算法是不完美的:它假定一个句子的结尾由一个小写字母后跟之一'.', '!'或者'?',可能还跟着一个'"'"'",后面加一个空格。这个问题的一个问题是它无法检测到“博士”之间的差异

[...] Dr. Frankenstein's monster [...]

和“现货。”在

[...] See Spot. See Spot run [...]

fix_sentence_endings 默认为false。

由于句子检测算法依赖于string.lowercase“小写字母”的定义,以及在一段时间之后使用两个空格来分隔同一行上的句子的惯例,因此它特定于英语语言文本。

break_long_words
(默认值:True )如果为true,那么长于的字width将被打破,以确保没有行长于width。如果它是假的,长话不会被打破,有些行可能长width。(长字会单独放在一条线上,以便最大限度地减少width超出的数量。)
break_on_hyphens
(默认值:True)如果为true,则最好在空格上和复合词中的连字符之后进行换行,这在英语中是惯用的。如果为false,则只有空格会被视为换行符的潜在好位置,但break_long_words如果您想要真正不可爱的单词,则需要设置为false。以前版本中的默认行为是始终允许断开带连字符的单词。
max_lines
(默认值:None)如果不是None,则输出最多包含 max_lines行,占位符出现在输出的末尾。

版本3.4中的新功能。

 

placeholder
(默认值:' [...]')如果已截断,将出现在输出文本末尾的字符串。

版本3.4中的新功能。

TextWrapper 还提供了一些公共方法,类似于模块级的便利功能:

wrap(text)
文本(字符串)中包含单个段落,因此每行最多为 width字符长。所有包装选项都取自实例的实例属性TextWrapper。返回输出行列表,没有最终换行符。如果包装的输出没有内容,则返回的列表为空。
fill(text)
包装文本中的单个段落,并返回包含包装段落的单个字符串。