You are here:  Home » Python » textwrap-文本换行和填充(13)Python语言(必读进阶学习教程)(参考资料)

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

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

可选的关键字参数对应于TextWrapper下面记录的实例属性 。 width默认为70

有关行为TextWrapper.wrap()方式的其他详细信息,请参阅方法 wrap()

textwrap.filltextwidth = 70** kwargs 
包装文本中的单个段落,并返回包含包装段落的单个字符串。 fill()是简写

"\n".join(wrap(text, ...))

特别是,fill()接受完全相同的关键字参数 wrap()

textwrap.shorten文字宽度** kwargs 
折叠并截断给定文本以适合给定宽度

首先,文本中的空格被折叠(所有空格都被单个空格替换)。如果结果适合宽度,则返回。否则,从末尾删除足够的单词,以便剩余的单词加上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下面记录的实例属性 。需要注意的是文本传递给之前的空白被折叠 功能,所以改变的价值,, ,和将没有任何效果。TextWrapperfill()tabsizeexpand_tabsdrop_whitespacereplace_whitespace

版本3.4中的新功能。

textwrap.dedent文字
文本的每一行中删除任何常见的前导空格。

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

请注意,制表符和空格都被视为空格,但它们不相等:行和被认为没有共同的前导空格。" 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.indenttextprefixpredicate = None 
文本中选定行的开头添加前缀

线路通过调用分开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文字
文本(字符串)中包含单个段落,因此每行最多为 width字符长。所有包装选项都取自实例的实例属性TextWrapper。返回输出行列表,没有最终换行符。如果包装的输出没有内容,则返回的列表为空。
fill文字
包装文本中的单个段落,并返回包含包装段落的单个字符串。