textwrap-文本换行和填充(13) – Python语言(必读进阶学习教程)(参考资料)
该textwrap
模块提供了一些便利功能,以及TextWrapper
完成所有工作的类。如果您只是包装或填充一两个文本字符串,那么便利功能应该足够好;否则,您应该使用 的实例 TextWrapper
来提高效率。
textwrap.
textwrap(
width=70,
**kwargs,
)
- 将单个段落包装在文本(字符串)中,因此每行最多为 宽度字符长。返回输出行列表,没有最终换行符。
可选关键字参数对应于 的实例属性
TextWrapper
,如下所述。 宽度默认为70
.
textwrap.
textfill(
width=70,
**kwargs,
)
- 将单个段落包裹在text中,并返回包含包裹段落的单个字符串。
fill()
是简写"\n".join(wrap(text, ...))
- 特别是,
fill()
接受与 . 完全相同的关键字参数wrap()
。
textwrap.
textshorten(
width,
**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()
tabsize
expand_tabs
drop_whitespace
replace_whitespace
3.4 版中的新功能。
textwrap.
textdedent(
)
- 从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.
textindent(
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.
**kwargsTextWrapper(
)
- 该
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。以前版本中的默认行为是始终允许断开带连字符的单词。
placeholder
- (默认值:
' [...]'
)如果已截断,将出现在输出文本末尾的字符串。版本3.4中的新功能。
TextWrapper
还提供了一些公共方法,类似于模块级的便利功能:
textwrap(
)
- 在文本(字符串)中包含单个段落,因此每行最多为
width
字符长。所有包装选项都取自实例的实例属性TextWrapper
。返回输出行列表,没有最终换行符。如果包装的输出没有内容,则返回的列表为空。
textfill(
)
- 包装文本中的单个段落,并返回包含包装段落的单个字符串。