python3從零學(xué)習(xí)-5.1.5菠劝、文本自動換行與填充模塊textwrap

????????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ú)字符串。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末欺栗,一起剝皮案震驚了整個濱河市抱环,隨后出現(xiàn)的幾起案子壳快,更是在濱河造成了極大的恐慌,老刑警劉巖镇草,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瘤旨,居然都是意外死亡梯啤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進(jìn)店門存哲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來因宇,“玉大人,你說我怎么就攤上這事祟偷〔旎” “怎么了?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵修肠,是天一觀的道長贺辰。 經(jīng)常有香客問我,道長嵌施,這世上最難降的妖魔是什么饲化? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮吗伤,結(jié)果婚禮上吃靠,老公的妹妹穿的比我還像新娘。我一直安慰自己足淆,他們只是感情好巢块,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著巧号,像睡著了一般族奢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上裂逐,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天歹鱼,我揣著相機(jī)與錄音,去河邊找鬼卜高。 笑死弥姻,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的掺涛。 我是一名探鬼主播庭敦,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼薪缆!你這毒婦竟也來了秧廉?” 一聲冷哼從身側(cè)響起伞广,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎疼电,沒想到半個月后嚼锄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蔽豺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年区丑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片修陡。...
    茶點(diǎn)故事閱讀 38,683評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡沧侥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出魄鸦,到底是詐尸還是另有隱情宴杀,我是刑警寧澤,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布拾因,位于F島的核電站旺罢,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏盾致。R本人自食惡果不足惜主经,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望庭惜。 院中可真熱鬧罩驻,春花似錦、人聲如沸护赊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽骏啰。三九已至节吮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間判耕,已是汗流浹背透绩。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留壁熄,地道東北人帚豪。 一個月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像草丧,于是被迫代替她去往敵國和親狸臣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評論 2 349