当前位置: 首页 > 后端技术 > Python

textwrap--文本自动换行和填充

时间:2023-03-26 14:26:35 Python

初步提示:在测试代码中,右尖括号(>)表示命令行中的命令输入;输出内容为单行,以井号(#)开头;该库的导入仅在本文的第一个测试代码中显示,其他代码块中省略了该库的导入代码。系统类型:Windows10python版本:Python3.9.0textwrap可以将文本字符串按照一定的规则进行换行,或者对文本字符串进行一些简单的处理。textwrap模块提供了一些快捷功能。通常,这些快捷功能足以满足需要。如果没有满足需求的快捷功能,也可以自定义TextWrapper类来满足需求。快捷函数textwrap.wrap(text,width=70,**kwargs)自动换行,返回参数为列表:text:str,待处理的字符串width:int,默认70,最大个数每行字符数**kwargs:可选参数,与TextWrapper实例中的参数相同返回值:list[str,str,str,...],包含一个或多个str类型子元素的列表。对于文本,每行自动用宽度字符换行,所有行都作为列表返回,行尾没有换行符。importtextwraps1='abcdefghijklmnopqrstuvwxyz'print(textwrap.wrap(s1,7))#['abcdefg','hijklmn','opqrstu','vwxyz']s11='ab\ncdefghijklmnop'print(textwrap.wrap(s11),10))#['abcde','fghijklmno','p']将表示换行符的特殊字符\n转换为空格,转换后的空格作为字符处理。然后我们测试测试所有转义字符:s11='start\a\b\f\n\r\t\v\\\'\"\0end'print(textwrap.fill(s11,30))#['start\x07\x08\\\'"\x00end']\a,\b,都转换成十六进制字符,\f,\n,\r,\t,\v都转换成空格,\\,\',\"一般都是转义的,代表一个字符,不像前面的转义字符那样有特殊作用。\0直接消失,代表的意思是一个空字符,那也不应该转换。textwrap.fill(text,width=70,**kwargs)自动换行返回一个新的字符串参数:text:str,待处理的字符串width:int,默认70,每行最大字符数**kwargs:可选参数,与TextWrapper实例中的参数相同返回值:str,一个单行或多行字符串对文本每行自动换宽字符(每个宽字符在其字符后加\n字符),返回值是一个字符串,它是相当于'\n'.join(['a','b','c'])s1='abcdefghijklmnopqrstuvwxyz'print(textwrap.fill(s1,7))#abcdefg#hijklmn#opqrstu#vwxyzs11='start\a\b\f\n\r\t\v\\\'\"\0end'print(textwrap.fill(s11,30))#star\'"endtextwrap.fill()函数也有类似的功能到textwrap.wrap()函数,它将一些专业字符转换为空格。textwrap.shorten(text,width,**kwargs)foldspacesandtruncatestring参数:text:str,待处理的字符串width:int,默认70,每行最大字符数**kwargs:可选参数,同TextWrapper实例中的参数返回值:str,一行的字符串将text中多个连续的空格折叠成一个,并根据width给定的长度截取字符串并添加后缀,添加后缀为截取的字符串长度不大于宽度。截断的内容以单词为单位进行截断。控制后缀的参数是placeholder,默认值为[...],后缀会占用所需要的最大长度,即加上后缀后截取的字符串小于等于该值由宽度参数设置。s2='testtesttesttest'print(textwrap.shorten(s2,12,placeholder='...'))#testtest...print(textwrap.shorten(s2,11,placeholder='...'))#test...第一个例子,折叠空格后,testtest一共有9个字符,加上后缀...,刚好是12个字符,等于width指定的12个字符范围。两个例子中,testtest加上后缀...超过了width参数指定的11个字符,那么只能再缩短一个词,在结果显示中就是test...。textwrap.dedent(text)去除所有前导空格相同的行参数:text:str,待处理的字符串返回值:str,一行或多行字符串在所有行中查找前导空格最短的行,然后全部行删除相同数量的前导空白字符。s='''aaabbb'''print(textwrap.dedent(s))##aaa#bbbs='''\t\taaa\tbbb'''print(textwrap.dedent(s))##aaa#bbbs='''aaa\tbbb'''print(textwrap.dedent(s))##aaa#bbb空格和\t转义字符都是空白字符,但是不一样,在编辑器的测试环境下中,\t字符类似于8个空格,但没有去掉,说明两者不认为是同一个前缀字符串。textwrap.indent(text,prefix,predicate=None)在指定行的开头添加字符参数:text:str,待处理的字符串prefix:str,在行首添加的字符串predicate:匿名函数可以传入,默认为None返回值:str,一行或多行的字符串。为文本中的每个子字符串添加前缀。可以通过predicate参数传入一个匿名函数来过滤符合条件的行并添加前缀。默认情况下,前缀被添加到不仅仅由空格(包括任何行终止符)组成的所有文本行。s4='aaa\nbbb\nccc\n'print(textwrap.indent(s4,'+'))#+aaa#+bbb#+ccc#print(textwrap.indent(s4,'+',lambda行:line[:1]==''))#指定行的第一个字符是空格#aaa#+bbb#ccc#classtextwrap.TextWrapper(**kwargs)TextWrapper构造函数接受多个可选的关键字参数,并且它的属性也可以在实例化后设置。下面两个对象是相似的。wr1=textwrap.TextWrapper()wr1.width=9wr2=textwrap.TextWrapper(width=9)TextWrapper类中包含的属性宽度——默认为70,自换行的最大行长。expand_tabs–默认为True,如果为True,则字符串中的制表符将使用字符串的expandtabs()方法扩展为空格。tabsize--默认为8,控制字符串的制表符展开为空格时的转换次数,仅当expand_tabs为True时有效。replace_whitespace--默认为True,使用wrap()方法将首先用单个空格替换字符串中的空白字符(制表符、换行符、垂直制表符、提要、回车符)。drop_whitespace–默认为True,每行开头和结尾的空白字符(在换行之后,但在缩进之前)被删除。但是,如果段落开头的空白字符后面没有任何非空白字符,则不会丢弃它们。如果丢弃的空格占据了整行,则整行都被丢弃。initial_indent--默认为'',一个将被添加到自动包装的输出的第一行的字符串。它的长度包含在第一行的长度中。空字符串不缩进。subsequent_indent--默认为'',一个字符串将附加到除第一行之外的所有换行输出行。它的长度包括在除一行之外的所有行的长度中。fix_sentence_endings–默认为False,将尝试检测句子结尾并确保句子始终由恰好两个空白字符分隔。break_long_words--默认为True,字长是否超过宽度值应该打断。break_on_hyphens--默认为True,True:根据英文惯例,在复合词的空格和连字符后将优先自动换行;False:只有空格会被认为是合适的潜在换行位置。max_lines--默认为None,输出字符串的最大行数。占位符——默认为'[...]',输出截断文本时要在末尾填充的子字符串。TextWrapper类包含方法wrap(text)——将文本(字符串)中的各个段落换行,以便每行的长度最多为width个字符。所有自动换行选项都是从TextWrapper实例的实例属性中获取的。返回不带尾随换行符的输出行列表。如果自动换行输出没有任何结果,则返回一个空列表。fill(text)--将单个段落包装在文本中并返回包含包装段落的单个字符串。一个简单的例子'''每7个字符换行,不转换空白字符,在第一行前加一个'--'前缀'''wr=textwrap.TextWrapper()wr.width=7wr.replace_whitespace=Falsewr。initial_indent='--'print(wr.wrap('a\f\v\nbcdefghijklmn'))#['--a\x0c\x0b\nb','cdefghi','jklmn']公众号:"pythongrocerystore》,重点介绍python语言及其相关知识。发现更多原创文章,期待您的关注。参考源码:lib/textwrap.py官方文档:https://docs.python.org/zh-cn...