textwrap
---文字环绕和填充¶
源代码: Lib/textwrap.py
这个 textwrap
模块提供了一些方便的功能,以及 TextWrapper
完成所有工作的类。如果只是封装或填充一个或两个文本字符串,那么便利函数应该足够好;否则,应该使用 TextWrapper
为了效率。
- textwrap.wrap(text, width=70, **kwargs)¶
将单个段落封装在 text (一根绳子)所以每一行至多是 宽度 字符长。返回输出行的列表,不带最后的换行符。
可选关键字参数对应的实例属性
TextWrapper
,记录如下。 宽度 默认为70
.见
TextWrapper.wrap()
有关如何wrap()
表现。
- textwrap.fill(text, width=70, **kwargs)¶
将单个段落封装在 text ,并返回包含已换行段落的单个字符串。
fill()
缩写为:"\n".join(wrap(text, ...))
- textwrap.shorten(text, width, **kwargs)¶
折叠并截断给定的 text 符合给定的 宽度 .
首先是空白 text 折叠(所有空格都替换为单个空格)。如果结果符合 宽度 ,则返回。否则,将从结尾处删除足够的单词,以便剩余的单词加上
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()
函数,因此更改tabsize
,expand_tabs
,drop_whitespace
和replace_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(text, prefix, predicate=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
)如果为真,则所有制表符 text 将使用扩展到空格expandtabs()
方法 text .
- tabsize¶
(默认:
8
如果expand_tabs
为真,则所有制表符 text 将根据当前列和给定的制表符大小扩展为零个或多个空格。3.3 新版功能.
- replace_whitespace¶
(默认:
True
)如果为真,则在展开制表符后封装之前,wrap()
方法将用单个空格替换每个空白字符。替换的空白字符如下:制表符、换行符、竖排制表符、换行符和回车符 ('\t\n\v\f\r'
)注解
如果
expand_tabs
是假的replace_whitespace
为真,每个制表符将替换为一个空格,即 not 与选项卡扩展相同。注解
如果
replace_whitespace
如果为假,换行符可能出现在行的中间并导致奇怪的输出。因此,文本应拆分为段落(使用str.splitlines()
或类似)分开封装。
- drop_whitespace¶
(默认:
True
)如果为真,则将删除每行开头和结尾的空白(换行后缩进前)。但是,如果后面跟着非空白,则不会删除段落开头的空白。如果删除的空白占用了整行,则会删除整行。
- initial_indent¶
(默认:
''
)将被封装输出的第一行前面的字符串。向第一行的长度计数。空字符串不缩进。
- subsequent_indent¶
(默认:
''
)将被封装输出的所有行(第一行除外)前面的字符串。对每行的长度计数,第一行除外。
- fix_sentence_endings¶
(默认:
False
如果是真的,TextWrapper
尝试检测句尾,并确保句子始终由两个空格分隔。这通常适用于单间距字体的文本。然而,句子检测算法是不完善的:它假设一个句子的结尾由一个小写字母和一个'.'
,'!'
或'?'
,后面可能是'"'
或"'"
,后跟一个空格。此算法的一个问题是,它无法检测“dr.”在中的差异:[...] Dr. Frankenstein's monster [...]
和“斑点”在:
[...] See Spot. See Spot run [...]
fix_sentence_endings
默认为false。因为句子检测算法依赖于
string.lowercase
对于“小写字母”的定义,以及在一个句点后使用两个空格分隔同一行上的句子的惯例,它是英语文本特有的。
- break_long_words¶
(默认:
True
)如果是真的话,那么文字要比width
将被断开,以确保任何行的长度都不超过width
. 如果是错的话,长句就不会被打断,有些句子可能比width
. (长单词将自己放在一行上,以便最小化width
超过。
- break_on_hyphens¶
(默认:
True
)如果为真,封装最好出现在复合词的空白处和连字符后,这在英语中很常见。如果为false,则只有空格将被视为换行的潜在好位置,但您需要设置break_long_words
如果你真的想要插入的话就错了。在以前的版本中,默认行为是始终允许断字。
- max_lines¶
(默认:
None
如果没有None
,则输出最多包含 max_lines 线,与 占位符 出现在输出的末尾。3.4 新版功能.
- placeholder¶
(默认:
' [...]'
)如果输出文本已被截断,则将显示在该文本末尾的字符串。3.4 新版功能.
TextWrapper
还提供了一些公共方法,类似于模块级的便利功能:- wrap(text)¶
将单个段落封装在 text (一根绳子)所以每一行至多是
width
字符长。所有封装选项都取自TextWrapper
实例。返回输出行的列表,不带最后的换行符。如果封装输出没有内容,则返回的列表为空。
- fill(text)¶
将单个段落封装在 text ,并返回包含已换行段落的单个字符串。