Textwrap – Python中的文本换行和填充
textwrap 模块可用于对纯文本进行换行和格式化。该模块通过调整输入段落中的换行符来提供文本格式。
TextWrapper 实例属性(和构造函数的关键字参数)如下:
- 宽度:这是指换行线允许的最大长度。它的默认值设置为 70。
- expand_tabs:它的默认值设置为 TRUE。如果该值等于 true,则使用此方法将示例输入中的所有制表字符扩展为空格。
- tabsize:它的默认值设置为 8。如果 expand_tabs 的值为 TRUE,则此方法将文本中的所有制表字符扩展到零个或多个空格,具体取决于当前列和给定的制表符大小。
- replace_whitespace:它的默认值设置为 TRUE。如果值为 true,则在制表符展开之后但换行之前,wrap() 方法将每个空白字符替换为单个空格。这些空白字符被替换:制表符、换行符、垂直制表符、换页符和回车符 ('\t\ n\v\f\r')。
- drop_whitespace:它的默认值设置为 TRUE。如果该值设置为 TRUE,则每行开头和结尾的空格(在换行之后但在缩进之前)将被删除。
- initial_indent:它的默认值设置为''。此方法将给定的字符串添加到包装输出的第一行。
- 随后的缩进:它的默认值设置为''。此方法将给定字符串添加到除第一行之外的所有包装输出行。
- 占位符:它的默认值设置为“[…]”。如果字符串被截断,此方法会将字符串附加到输出文本的末尾。
- max_lines:它的默认值设置为无。如果该值不是 None,则输出文本最多包含 max_lines 行,在输出末尾有占位符。
- break_long_words:它的默认值设置为 True。如果为 TRUE,那么长于宽度的单词会被打断以适应给定宽度中的每一行。如果为FALSE,长字不会被打断,会自己排成一行,以尽量减少超出宽度的量。
- break_on_hyphens:它的默认值设置为 True。如果该值等于 TRUE,则在复合词中的空格和连字符之后发生换行。如果该值等于 FALSE,则仅在空格上出现换行符,但如果您想要真正不可分割的单词,则需要将 break_long_words 设置为 FALSE。
Textwrap 模块提供的功能:
- textwrap.wrap(text, width=70, **kwargs) :此函数包装输入段落,使得段落中的每一行最多为宽度字符长。 wrap 方法返回一个输出行列表。如果包装的输出没有内容,则返回的列表为空。默认宽度为 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.
- textwrap.fill(text, width=70, **kwargs): fill() 便利函数的工作方式与 textwrap.wrap 类似,不同之处在于它将数据连接到单个换行符分隔的字符串中。此函数将输入的单个段落包装在文本中,并返回包含包装段落的单个字符串。
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.
- textwrap.dedent(text) :此函数用于从输入文本的每一行中删除任何常见的前导空格。这允许使用文档字符串或嵌入的多行字符串与显示的左边缘对齐,同时删除代码本身的格式。
例子 :
import textwrap wrapper = textwrap.TextWrapper(width=50) s = '''\ hello world ''' print(repr(s)) # prints ' hello\n world\n ' text = textwrap.dedent(s) print(repr(text)) # prints 'hello\n world\n'
输出 :
' hello\n world\n ' 'hello\n world\n'
- textwrap.shorten(text, width, **kwargs) :此函数截断输入字符串,使字符串的长度等于给定的宽度。首先,通过用单个空格删除空格来折叠字符串中的所有空格。如果修改后的字符串适合给定的字符串,则返回,否则将删除末尾的字符,以便剩余的单词加上占位符适合宽度。
import textwrap sample_text = """This function wraps the input paragraph such that each line n 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.""" wrapper = textwrap.TextWrapper(width=50) dedented_text = textwrap.dedent(text=sample_text) original = wrapper.fill(text=dedented_text) print('Original:\n') print(original) shortened = textwrap.shorten(text=original, width=100) shortened_wrapped = wrapper.fill(text=shortened) print('\nShortened:\n') print(shortened_wrapped)
输出 :
Original: This function wraps the input paragraph such that each line n 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. Shortened: This function wraps the input paragraph such that each line n the paragraph is at most width [...]
- textwrap.indent(text, prefix, predicate=None) :此函数用于将给定的前缀添加到所选文本行的开头。谓词参数可用于控制缩进的行。
import textwrap s = 'hello\n\n \nworld' s1 = textwrap.indent(text=s, prefix=' ') print (s1) print ("\n") s2 = textwrap.indent(text=s, prefix='+ ', predicate=lambda line: True) print (s2)
输出 :
hello world + hello + + + world