????????TextWrapper ?模塊提供了一些快捷函數(shù)隶糕,以及可以完成所有工作的類?TextWrapper? ? ? ? ? ??
如果你只是要對一兩個文本字符串進(jìn)行自動換行或填充,快捷函數(shù)應(yīng)該就夠用了涌矢;否則的話,你應(yīng)該使用?TextWrapper? ? ? ? ? 的實例來提高效率快骗。
textwrap.wrap(text,?width=70,?**kwargs)
對?text?(字符串) 中的單獨(dú)段落自動換行以使每行長度最多為?width?個字符娜庇。 返回由輸出行組成的列表,行尾不帶換行符方篮。
可選的關(guān)鍵字參數(shù)對應(yīng)于?TextWrapper? ? ? ? ? 的實例屬性名秀,具體文檔見下。?width?默認(rèn)為?70藕溅。
請參閱?TextWrapper.wrap()? ? ? ? ? ? ? ?方法了解有關(guān)?wrap()? ? ? 行為的詳細(xì)信息匕得。
def wrap(text, width=70, **kwargs):
?? ?"""Wrap a single paragraph of text, returning a list of wrapped lines.
?? ?Reformat the single paragraph in 'text' so it fits in lines of no
?? ?more than 'width' columns, and return a list of wrapped lines. By
?? ?default, tabs in 'text' are expanded with string.expandtabs(), and
?? ?all other whitespace characters (including newline) are converted to
?? ?space. See TextWrapper class for available keyword args to customize
?? ?wrapping behaviour.
?? ?"""
?? ?w = TextWrapper(width=width, **kwargs)
?? ?return w.wrap(text)
textwrap.fill(text,?width=70,?**kwargs)
def fill(text, width=70, **kwargs):
?? ?"""Fill a single paragraph of text, returning a new string.
?? ?Reformat the single paragraph in 'text' to fit in lines of no more
?? ?than 'width' columns, and return a new string containing the entire
?? ?wrapped paragraph. As with wrap(), tabs are expanded and other
?? ?whitespace characters converted to space. See TextWrapper class for
?? ?available keyword args to customize wrapping behaviour.
?? ?“""
?? ?w = TextWrapper(width=width, **kwargs)
?? ?return w.fill(text)
對?text?中的單獨(dú)段落自動換行,并返回一個包含被自動換行段落的單獨(dú)字符串巾表。?fill()? ? ?是以下語句的快捷方式
"\n".join(wrap(text,...))
特別要說明的是汁掠,fill()??接受與?wrap()? ? ?完全相同的關(guān)鍵字參數(shù)。
textwrap.shorten(text,?width,?**kwargs)
折疊并截短給定的?text?以符合給定的?width集币。
def shorten(text, width, **kwargs):
?? ?"""Collapse and truncate the given text to fit in the given width.
?? ??? ?The text first has its whitespace collapsed. If it then fits in
?? ??? ?the *width*, it is returned as is. Otherwise, as many words
?? ??? ?as possible are joined and then the placeholder is appended::
?? ??? ??? ?>>> textwrap.shorten("Hello world!", width=12)
?? ??? ??? ??? ?'Hello world!'
?? ??? ?? ??>>> textwrap.shorten("Hello world!", width=11)
?? ??? ??? ??? ?'Hello [...]'
?? ?"""
?? ?w = TextWrapper(width=width, max_lines=1, **kwargs)
?? ?return w.fill(' '.join(text.strip().split()))
首先將折疊?text?中的空格(所有連續(xù)空格替換為單個空格)考阱。 如果結(jié)果能適合?width?則將其返回。 否則將丟棄足夠數(shù)量的末尾單詞以使得剩余單詞加?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...'
可選的關(guān)鍵字參數(shù)對應(yīng)于?TextWrapper ??的實際屬性鞠苟,具體見下文乞榨。 請注意文本在被傳入?TextWrapper? ? ? ?的?fill()? ? ? ?函數(shù)之前會被折疊,因此改變?tabsize, ? ? ?exand_tabs, ? ? ? ??drop_whitespace? ? ? ? ? ? 和?replace_whitespace? ? ? ? ? ? ? ? ? 的值將沒有任何效果当娱。
3.4 新版功能.
textwrap.dedent(text)
移除?text?中每一行的任何相同前綴空白符吃既。
這可以用來清除三重引號字符串行左側(cè)空格,而仍然在源碼中顯示為縮進(jìn)格式跨细。
請注意制表符和空格符都被視為是空白符鹦倚,但它們并不相等:以下兩行?"??hello"?和?"\thello"?不會被視為具有相同的前綴空白符。
例如
deftest():
???# 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)
將?prefix?添加到?text?中選定行的開頭冀惭。
通過調(diào)用?text.splitlines(True)?來對行進(jìn)行拆分申鱼。
默認(rèn)情況下,prefix?會被添加到所有不是只由空白符(包括任何行結(jié)束符)組成的行云头。
例如
>>>
>>>s='hello\n\n\nworld'
>>>indent(s,'? ')
'? hello\n\n \n? world'
可選的?predicate?參數(shù)可用來控制哪些行要縮進(jìn)。 例如淫半,可以很容易地為空行或只有空白符的行添加?prefix:
>>>
>>>print(indent(s,'+ ',lambdaline:True))
+ hello
+
+
+ world
3.3 新版功能.
wrap(), ? ? ??fill()? ? ? 和?shorten()? ? ? ?的作用方式為創(chuàng)建一個?TextWrapper? ? ? ? ?實例并在其上調(diào)用單個方法溃槐。 該實例不會被重用,因此對于要使用?wrap()??和/或?fill()? ? ?來處理許多文本字符串的應(yīng)用來說科吭,創(chuàng)建你自己的?TextWrapper? ? ? ? ?對象可能會更有效率昏滴。
文本最好在空白符位置自動換行猴鲫,包括帶連字符單詞的連字符之后;長單詞僅在必要時會被拆分谣殊,除非?TextWrapper.break_long_words? ? ? ? ? ? ? ? ? ? ? ? 被設(shè)為假值拂共。
class?textwrap.TextWrapper(**kwargs)
TextWrapper ?構(gòu)造器接受多個可選的關(guān)鍵字參數(shù)。 每個關(guān)鍵字參數(shù)對應(yīng)一個實例屬性姻几,比如說
wrapper=TextWrapper(initial_indent="* ")
就相當(dāng)于
wrapper=TextWrapper()
wrapper.initial_indent="* "
你可以多次重用相同的?TextWrapper? ? ? ? ?對象宜狐,并且你也可以在使用期間通過直接向?qū)嵗龑傩再x值來修改它的任何選項。
TextWrapper? ? ? ? ? 的實例屬性(以及構(gòu)造器的關(guān)鍵字參數(shù))如下所示:
width
(默認(rèn):?70) 自動換行的最大行長度蛇捌。 只要輸入文本中沒有長于?width? ? ?的單個單詞抚恒,TextWrapper? ? ? ? ?就能保證沒有長于?width?個字符的輸出行。
expand_tabs
(默認(rèn):?True) 如果為真值络拌,則?text?中所有的制表符將使用?text?的?expandtabs()?方法擴(kuò)展為空格符俭驮。
tabsize
(默認(rèn):?8) 如果?expand_tabs? ? ? ? ?為真值,則?text?中所有的制表符將擴(kuò)展為零個或多個空格春贸,具體取決于當(dāng)前列位置和給定的制表寬度混萝。
3.3 新版功能.
replace_whitespace
(default:?True) 如果為真值,在制表符擴(kuò)展之后萍恕、自動換行之前逸嘀,wrap()?方法將把每個空白字符都替換為單個空格。 會被替換的空白字符如下:制表雄坪,換行厘熟,垂直制表,進(jìn)紙和回車 ('\t\n\v\f\r')维哈。
注解
如果?expand_tabs? ? ? ? ?為假值且?replace_whitespace? ? ? ? ? ? ? ?為真值绳姨,每個制表符將被替換為單個空格,這與制表符擴(kuò)展是?不?一樣的阔挠。
注解
如果?replace_whitespace? ? ? ? ? ? ? ?為假值飘庄,在一行的中間有可能出現(xiàn)換行符并導(dǎo)致怪異的輸出。 因此购撼,文本應(yīng)當(dāng)(使用?str.splitlines()? ? ? ? ? ? ?或類似方法)拆分為段落并分別進(jìn)行自動換行跪削。
drop_whitespace
(默認(rèn):?True) 如果為真值,每一行開頭和末尾的空白字符(在包裝之后迂求、縮進(jìn)之前)會被丟棄碾盐。 但是段落開頭的空白字符如果后面不帶任何非空白字符則不會被丟棄。 如果被丟棄的空白字符占據(jù)了一個整行揩局,則該整行將被丟棄毫玖。
initial_indent
(默認(rèn):?'') 將被添加到被自動換行輸出內(nèi)容的第一行的字符串。 其長度會被計入第一行的長度。 空字符串不會被縮進(jìn)付枫。
subsequent_indent
(default:?'') 將被添加到被自動換行輸出內(nèi)容除第一行外的所有行的字符串烹玉。 其長度會被計入除行一行外的所有行的長度。
fix_sentence_endings
(默認(rèn):?False) 如果為真值阐滩,TextWrapper? ? ? ? ?將嘗試檢測句子結(jié)尾并確保句子間總是以恰好兩個空格符分隔二打。 對于使用等寬字體的文本來說通常都需要這樣。 但是掂榔,句子檢測算法并不完美:它假定句子結(jié)尾是一個小寫字母加字符?'.',?'!'?或?'?'?中的一個继效,并可能帶有字符?'"'?或?"'",最后以一個空格結(jié)束衅疙。 此算法的問題之一是它無法區(qū)分以下文本中的 “Dr.”
[...] Dr.Frankenstein's monster [...]
和以下文本中的 “Spot.”
[...] See Spot.See Spot run [...]
fix_sentence_endings? ? ? ? ? ? ? ? ?默認(rèn)為假值莲趣。
Since the sentence detection algorithm relies on?string.lowercase?for the definition of “l(fā)owercase letter,” and a convention of using two spaces after a period to separate sentences on the same line, it is specific to English-language texts.
break_long_words
(默認(rèn):?True) 如果為真值,則長度超過?width?的單詞將被分開以保證行的長度不會超過?width饱溢。 如果為假值喧伞,超長單詞不會被分開,因而某些行的長度可能會超過?width绩郎。 (超長單詞將被單獨(dú)作為一行潘鲫,以盡量減少超出?width??的情況。)
break_on_hyphens
(默認(rèn):?True) 如果為真值肋杖,將根據(jù)英語的慣例首選在空白符和復(fù)合詞的連字符之后自動換行溉仑。 如果為假值,則只有空白符會被視為合適的潛在斷行位置状植,但如果你確實不希望出現(xiàn)分開的單詞則你必須將?break_long_words? ? ? ? ? ? ?設(shè)為假值浊竟。 之前版本的默認(rèn)行為總是允許分開帶有連字符的單詞。
max_lines
(默認(rèn):?None) 如果不為?None津畸,則輸出內(nèi)容將最多包含?max_lines?行振定,并使?placeholder?出現(xiàn)在輸出內(nèi)容的末尾。
3.4 新版功能.
placeholder
(默認(rèn):?'?[...]') 該文本將在輸出文本被截短時出現(xiàn)在文本末尾肉拓。
3.4 新版功能.
TextWrapper? ? ? ? ?還提供了一些公有方法后频,類似于模塊層級的便捷函數(shù):
wrap(text)
對?text?(字符串) 中的單獨(dú)段落自動換行以使每行長度最多為?width? ? 個字符。 所有自動換行選項均獲取自?TextWrapper? ? ? ? ?實例的實例屬性暖途。 返回由輸出行組成的列表卑惜,行尾不帶換行符。 如果自動換行輸出結(jié)果沒有任何內(nèi)容驻售,則返回空列表露久。
fill(text)
對?text?中的單獨(dú)段落自動換行并返回包含被自動換行段落的單獨(dú)字符串。