引言
textwrap 模块是 Python 中一个非常实用的工具,专门用于对纯文本进行排版和格式化。通过调整输入段落中的换行符,我们可以轻松地控制文本的显示效果。让我们来深入了解一下这个模块的功能。
TextWrapper 实例属性
当我们创建一个 TextWrapper 实例时(或者调用构造函数时),我们可以使用以下属性来配置其行为:
- width (宽度): 这指的是换行后每行允许的最大长度。其默认值被设定为 70 个字符。
- expandtabs (展开制表符): 它的默认值是 INLINECODEe3855a42。如果该值为真,该方法会将输入样本中的所有制表符(Tab 字符)扩展为空格。
- tabsize (制表符大小): 它的默认值被设定为 8。如果
expand_tabs的值为真,此方法会根据当前列的位置和给定的制表符大小,将文本中的所有制表符扩展为零个或多个空格。 - replacewhitespace (替换空白字符): 它的默认值是 INLINECODE25ca3c56。如果该值为真,在展开制表符之后、进行换行之前,INLINECODE92dc3f9c 方法会将每个空白字符替换为单个空格。被替换的空白字符包括:制表符、换行符、垂直制表符、换页符和回车符 (INLINECODEb1f6a7c8)。
- dropwhitespace (去除空白字符): 它的默认值是 INLINECODEa8eed6ff。如果该值被设定为真,每一行开头和结尾的空白字符(在换行之后、缩进之前)将被删除。
- initialindent (首行缩进): 它的默认值是 INLINECODE010ba60e。此方法会将给定的字符串前缀添加到换行输出的第一行。
- subsequentindent (后续行缩进): 它的默认值是 INLINECODE5a407823。此方法会将给定的字符串前缀添加到换行输出的除第一行之外的所有行。
- placeholder (占位符): 它的默认值是
‘ [...]‘。如果输出文本被截断,此方法会将该字符串追加到输出文本的末尾。 - maxlines (最大行数): 它的默认值是 INLINECODEde3f05d9。如果该值不为 None,输出文本将最多包含
max_lines行,并在输出末尾显示占位符。 - breaklongwords (断开长单词): 它的默认值是 INLINECODE9fa980b5。如果为 INLINECODEa4885468,那么长度超过 INLINECODE61afc1ce 的单词将被断开,以适应每一行的给定宽度。如果为 INLINECODEd733c1f3,长单词将不会被断开,它们将单独占据一行,从而尽量减少超出宽度的程度。
- breakonhyphens (在连字符处断开): 它的默认值是 INLINECODE9afa61ad。如果该值为 INLINECODEf5d241ef,换行会发生在空白处以及复合单词中连字符的右侧。如果该值为 INLINECODE79c7c04b,换行仅发生在空白处;但如果你想要真正不可分割的单词,你需要将 INLINECODEbc7b891f 设置为
False。
Textwrap 模块提供的主要函数
让我们通过一些例子来看看这些函数是如何工作的。
1. textwrap.wrap(text, width=70, kwargs)
这个函数会对输入的段落进行换行处理,使得段落中的每一行最多包含 INLINECODE78fd1e5d 个字符。INLINECODE796f2e70 方法会返回一个包含输出行的列表。如果换行后的输出没有内容,返回的列表将为空。默认宽度被设定为 70。
import textwrap
value = """This function wraps the input paragraph such that each line
in the paragraph is at most width characters long. The wrap method
returns a list of output lines. The returned list
is empty if the wrapped
output has no content."""
# Wrap this text.
wrapper = textwrap.TextWrapper(width=50)
word_list = wrapper.wrap(text=value)
# Print each line.
for element in word_list:
print(element)
输出:
This function wraps the input paragraph such that
each line in the paragraph is at most width
characters long. The wrap method returns a list of
output lines. The returned list is empty if the
wrapped output has no content.
2. textwrap.fill(text, width=70, kwargs)
INLINECODEcb28c8fd 便捷函数的工作方式类似于 INLINECODE3b23b88c,区别在于它返回的是一个单独的、由换行符分隔的字符串,而不是列表。这个函数对文本中的单个输入段落进行换行,并返回包含该换行段落的单个字符串。
import textwrap
value = """This function returns the answer as STRING and not LIST."""
# Wrap this text.
wrapper = textwrap.TextWrapper(width=50)
string = wrapper.fill(text=value)
print (string)
输出:
This function returns the answer as STRING and not LIST.
3. textwrap.dedent(text)
这个函数用于移除输入文本中每一行任何常见的公共前导空白。这允许我们在代码中使用缩进来保持美观(例如文档字符串或嵌入的多行字符串),但在显示时让它们与屏幕左边缘对齐,同时去除代码本身的格式缩进。
示例:
import textwrap
wrapper = textwrap.TextWrapper(width=50)
s = ‘‘‘\
hello
world
‘‘‘
print(repr(s)) # prints ‘ hello
world
‘
text = textwrap.dedent(s)
print(repr(text)) # prints ‘hello
world
‘
输出:
‘ hello
world
‘
‘hello
world
‘
4. textwrap.shorten(text, width, kwargs)
这个函数会截断输入字符串,使字符串的长度等于给定的宽度。首先,所有的空白字符都会在字符串中被折叠(即多个连续空格变为一个)…