摘要:上一篇文章標(biāo)準(zhǔn)庫(kù)內(nèi)置類型迭代器類型序列類型下一篇文章標(biāo)準(zhǔn)庫(kù)內(nèi)置類型二進(jìn)制序列類型文本序列類型在中處理文本數(shù)據(jù)是使用對(duì)象,也稱為字符串。正式的定義為十進(jìn)制數(shù)字符就是一般分類中的字符。
上一篇文章:Python標(biāo)準(zhǔn)庫(kù)---11、內(nèi)置類型:迭代器類型、序列類型(list-typle-range)文本序列類型 --- str
下一篇文章:Python標(biāo)準(zhǔn)庫(kù)---13、內(nèi)置類型:二進(jìn)制序列類型 ( bytes, bytearray, memoryview)
在 Python 中處理文本數(shù)據(jù)是使用 str 對(duì)象,也稱為 字符串。 字符串是由 Unicode 碼位構(gòu)成的不可變 序列。 字符串字面值有多種不同的寫法:
單引號(hào): "允許包含有 "雙" 引號(hào)" 雙引號(hào): "允許包含有 "單" 引號(hào)"。 三重引號(hào): """三重單引號(hào)""", """三重雙引號(hào)"""
使用三重引號(hào)的字符串可以跨越多行 —— 其中所有的空白字符都將包含在該字符串字面值中。
作為單一表達(dá)式組成部分,之間只由空格分隔的多個(gè)字符串字面值會(huì)被隱式地轉(zhuǎn)換為單個(gè)字符串字面值。 也就是說,("spam " "eggs") == "spam eggs"。
請(qǐng)參閱 字符串和字節(jié)串字面值 有解有關(guān)不同字符串字面值的更多信息,包括所支持的轉(zhuǎn)義序列,以及使用 r ("raw") 前綴來(lái)禁用大多數(shù)轉(zhuǎn)義序列的處理。
字符串也可以通過使用 str 構(gòu)造器從其他對(duì)象創(chuàng)建。
由于不存在多帶帶的“字符”類型,對(duì)字符串做索引操作將產(chǎn)生一個(gè)長(zhǎng)度為 1 的字符串。 也就是說,對(duì)于一個(gè)非空字符串 s, s[0] == s[0:1]。
不存在可變的字符串類型,但是 str.join() 或 io.StringIO 可以被用來(lái)根據(jù)多個(gè)片段高效率地構(gòu)建字符串。
在 3.3 版更改: 為了與 Python 2 系列的向下兼容,再次允許字符串字面值使用 u 前綴。 它對(duì)字符串字面值的含義沒有影響,并且不能與 r 前綴同時(shí)出現(xiàn)。
class str(object="") class str(object=b"", encoding="utf-8", errors="strict")返回 object 的 字符串 版本。 如果未提供 object 則返回空字符串。 在其他情況下 str() 的行為取決于 encoding 或 errors 是否有給出,具體見下。 如果 encoding 或 errors 均未給出,str(object) 返回 object.__str__(),這是 object 的“非正式”或格式良好的字符串表示。 對(duì)于字符串對(duì)象,這是該字符串本身。 如果 object 沒有 __str__() 方法,則 str() 將回退為返回 repr(object)。 如果 encoding 或 errors 至少給出其中之一,則 object 應(yīng)該是一個(gè) bytes-like object (例如 bytes 或 bytearray)。 在此情況下,如果 object 是一個(gè) bytes (或 bytearray) 對(duì)象,則 str(bytes, encoding, errors) 等價(jià)于 bytes.decode(encoding, errors)。 否則的話,會(huì)在調(diào)用 bytes.decode() 之前獲取緩沖區(qū)對(duì)象下層的 bytes 對(duì)象。 請(qǐng)參閱 二進(jìn)制序列類型 --- bytes, bytearray, memoryview 與 緩沖協(xié)議 了解有關(guān)緩沖區(qū)對(duì)象的信息。 將一個(gè) bytes 對(duì)象傳入 str() 而不給出 encoding 或 errors 參數(shù)的操作屬于第一種情況, 將返回非正式的字符串表示(另請(qǐng)參閱 Python 的 -b 命令行選項(xiàng))。 例如:
>>> str(b"Zoot!") "b"Zoot!""
有關(guān) str 類及其方法的更多信息,請(qǐng)參閱下面的 文本序列類型 --- str 和 字符串的方法 小節(jié)。 要輸出格式化字符串,請(qǐng)參閱 格式化字符串字面值 和 格式字符串語(yǔ)法 小節(jié)。 此外還可以參閱 文本處理服務(wù) 小節(jié)。字符串的方法
字符串實(shí)現(xiàn)了所有 一般 序列的操作,還額外提供了以下列出的一些附加方法。
字符串還支持兩種字符串格式化樣式,一種提供了很大程度的靈活性和可定制性 (參閱 str.format(), 格式字符串語(yǔ)法 和 自定義字符串格式化) 而另一種是基于 C printf 樣式的格式化,它可處理的類型范圍較窄,并且更難以正確使用,但對(duì)于它可處理的情況往往會(huì)更為快速 (printf 風(fēng)格的字符串格式化)。
標(biāo)準(zhǔn)庫(kù)的 文本處理服務(wù) 部分涵蓋了許多其他模塊,提供各種文本相關(guān)工具(例如包含于 re 模塊中的正則表達(dá)式支持)。
str.capitalize()返回原字符串的副本,其首個(gè)字符大寫,其余為小寫。str.casefold()
返回原字符串消除大小寫的副本。 消除大小寫的字符串可用于忽略大小寫的匹配。 消除大小寫類似于轉(zhuǎn)為小寫,但是更加徹底一些,因?yàn)樗鼤?huì)移除字符串中的所有大小寫變化形式。 例如,德語(yǔ)小寫字母 "?" 相當(dāng)于 "ss"。 由于它已經(jīng)是小寫了,lower() 不會(huì)對(duì) "?" 做任何改變;而 casefold() 則會(huì)將其轉(zhuǎn)換為 "ss"。 消除大小寫算法的描述請(qǐng)參見 Unicode 標(biāo)準(zhǔn)的 3.13 節(jié)。 3.3 新版功能.str.center(width[, fillchar])
返回長(zhǎng)度為 width 的字符串,原字符串在其正中。 使用指定的 fillchar 填充兩邊的空位(默認(rèn)使用 ASCII 空格符)。 如果 width 小于等于 len(s) 則返回原字符串的副本。str.count(sub[, start[, end]])
反回子字符串 sub 在 [start, end] 范圍內(nèi)非重疊出現(xiàn)的次數(shù)。 可選參數(shù) start 與 end 會(huì)被解讀為切片表示法。str.encode(encoding="utf-8", errors="strict")
返回原字符串編碼為字節(jié)串對(duì)象的版本。 默認(rèn)編碼為 "utf-8"。 可以給出 errors 來(lái)設(shè)置不同的錯(cuò)誤處理方案。 errors 的默認(rèn)值為 "strict",表示編碼錯(cuò)誤會(huì)引發(fā) UnicodeError。 其他可用的值為 "ignore", "replace", "xmlcharrefreplace", "backslashreplace" 以及任何其他通過 codecs.register_error() 注冊(cè)的值,請(qǐng)參閱 Error Handlers 小節(jié)。 要查看可用的編碼列表,請(qǐng)參閱 標(biāo)準(zhǔn)編碼 小節(jié)。 在 3.1 版更改: 加入了對(duì)關(guān)鍵字參數(shù)的支持。str.endswith(suffix[, start[, end]])
如果字符串以指定的 suffix 結(jié)束返回 True,否則返回 False。 suffix 也可以為由多個(gè)供查找的后綴構(gòu)成的元組。 如果有可選項(xiàng) start,將從所指定位置開始檢查。 如果有可選項(xiàng) end,將在所指定位置停止比較。str.expandtabs(tabsize=8)
返回字符串的副本,其中所有的制表符會(huì)由一個(gè)或多個(gè)空格替換,具體取決于當(dāng)前列位置和給定的制表符寬度。 每 tabsize 個(gè)字符設(shè)為一個(gè)制表位(默認(rèn)值 8 時(shí)設(shè)定的制表位在列 0, 8, 16 依次類推)。 要展開字符串,當(dāng)前列將被設(shè)為零并逐一檢查字符串中的每個(gè)字符。 如果字符為制表符 ( ),則會(huì)在結(jié)果中插入一個(gè)或多個(gè)空格符,直到當(dāng)前列等于下一個(gè)制表位。 (制表符本身不會(huì)被復(fù)制。) 如果字符為換行符 ( ) 或回車符 ( ),它會(huì)被復(fù)制并將當(dāng)前列重設(shè)為零。 任何其他字符會(huì)被不加修改地復(fù)制并將當(dāng)前列加一,不論該字符在被打印時(shí)會(huì)如何顯示。
>>> "01 012 0123 01234".expandtabs() "01 012 0123 01234" >>> "01 012 0123 01234".expandtabs(4) "01 012 0123 01234"str.find(sub[, start[, end]])
返回子字符串 sub 在 s[start:end] 切片內(nèi)被找到的最小索引。 可選參數(shù) start 與 end 會(huì)被解讀為切片表示法。 如果 sub 未被找到則返回 -1。 注解 find() 方法應(yīng)該只在你需要知道 sub 所在位置時(shí)使用。 要檢查 sub 是否為子字符串,請(qǐng)使用 in 操作符:
>>> "Py" in "Python" Truestr.format(args, *kwargs)
執(zhí)行字符串格式化操作。 調(diào)用此方法的字符串可以包含字符串字面值或者以花括號(hào) {} 括起來(lái)的替換域。 每個(gè)替換域可以包含一個(gè)位置參數(shù)的數(shù)字索引,或者一個(gè)關(guān)鍵字參數(shù)的名稱。 返回的字符串副本中每個(gè)替換域都會(huì)被替換為對(duì)應(yīng)參數(shù)的字符串值。
>>> "The sum of 1 + 2 is {0}".format(1+2) "The sum of 1 + 2 is 3"
請(qǐng)參閱 格式字符串語(yǔ)法 了解有關(guān)可以在格式字符串中指定的各種格式選項(xiàng)的說明。
注解當(dāng)使用 n 類型 (例如: "{:n}".format(1234)) 來(lái)格式化數(shù)字 (int, float, complex, decimal.Decimal 及其子類) 的時(shí)候,該函數(shù)會(huì)臨時(shí)性地將 LC_CTYPE 區(qū)域設(shè)置為 LC_NUMERIC 區(qū)域以解碼 localeconv() 的 decimal_point 和 thousands_sep 字段,如果它們是非 ASCII 字符或長(zhǎng)度超過 1 字節(jié)的話,并且 LC_NUMERIC 區(qū)域會(huì)與 LC_CTYPE 區(qū)域不一致。 這個(gè)臨時(shí)更改會(huì)影響其他線程。
在 3.7 版更改: 當(dāng)使用 n 類型格式化數(shù)字時(shí),該函數(shù)在某些情況下會(huì)臨時(shí)性地將 LC_CTYPE 區(qū)域設(shè)置為 LC_NUMERIC 區(qū)域。str.format_map(mapping)
類似于 str.format(**mapping),不同之處在于 mapping 會(huì)被直接使用而不是復(fù)制到一個(gè) dict。 適宜使用此方法的一個(gè)例子是當(dāng) mapping 為 dict 的子類的情況:
>>> class Default(dict): ... def __missing__(self, key): ... return key ... >>> "{name} was born in {country}".format_map(Default(name="Guido")) "Guido was born in country"
3.2 新版功能.str.index(sub[, start[, end]])
類似于 find(),但在找不到子類時(shí)會(huì)引發(fā) ValueError。str.isalnum()
如果字符串中至少有一個(gè)字符且所有字符均為字母或數(shù)字則返回真值,否則返回假值。 如果以下方法中的一個(gè)返回 True 則字符 c 為字母或數(shù)字: c.isalpha(), c.isdecimal(), c.isdigit(), or c.isnumeric()。str.isalpha()
如果字符串中至少有一個(gè)字符且所有字符均為字母則返回真值,否則返回假值。 字母類字符是在 Unicode 字符數(shù)據(jù)庫(kù)中被定義為 "Letter" 的字符,即一般分類特征屬性為 "Lm", "Lt", "Lu", "Ll" 或 "Lo" 其中之一。 請(qǐng)注意這不同于 Unicode 標(biāo)準(zhǔn)所定義的 "Alphabetic" 特征屬性。str.isascii()
如果字符串為空或所有字符均為 ASCII 字符則返回真值,否則返回假值。 ASCII 字符的碼位范圍為 U+0000-U+007F。 3.7 新版功能.str.isdecimal()
如果字符串中至少有一個(gè)字符且所有字符均為十進(jìn)制數(shù)字符則返回真值,否則返回假值。 十進(jìn)制數(shù)字符是以 10 為基數(shù)的計(jì)數(shù)制會(huì)用來(lái)組成數(shù)值的字符,例如 U+0660, ARABIC-INDIC DIGIT ZERO。 正式的定義為:十進(jìn)制數(shù)字符就是 Unicode 一般分類 "Nd" 中的字符。str.isdigit()
如果字符串中至少有一個(gè)字符且所有字符均為數(shù)字字符則返回真值,否則返回假值。 數(shù)字字符包括十進(jìn)制數(shù)字符和需要特別處理的數(shù)字,例如兼容性上標(biāo)數(shù)字。 這也涵蓋了不能被用來(lái)組成以 10 為基數(shù)的數(shù)值的數(shù)字,例如 Kharosthi 數(shù)字。 正式的定義為:數(shù)字字符就是特征屬性值 Numeric_Type=Digit 或 Numeric_Type=Decimal 的字符。str.isidentifier()
如果字符串根據(jù)語(yǔ)言定義屬于有效的標(biāo)識(shí)符則返回真值,參見 標(biāo)識(shí)符和關(guān)鍵字。 請(qǐng)使用 keyword.iskeyword() 來(lái)檢測(cè)保留標(biāo)識(shí)符,例如 def 和 class。str.islower()
如果字符串中至少有一個(gè)區(qū)分大小寫的字符 且此類字符均為小寫則返回真值,否則返回假值。str.isnumeric()
如果字符串中至少有一個(gè)字符且所有字符均為數(shù)值字符則返回真值,否則返回假值。 數(shù)值字符包括數(shù)字字符,以及所有在 Unicode 中設(shè)置了數(shù)值特性屬性的字符,例如 U+2155, VULGAR FRACTION ONE FIFTH。 正式的定義為:數(shù)值字符就是具有特征屬性值 Numeric_Type=Digit, Numeric_Type=Decimal 或 Numeric_Type=Numeric 的字符。str.isprintable()
如果字符串中所有字符均為可打印字符或字符串為空則返回真值,否則返回假值。 不可打印字符是在 Unicode 字符數(shù)據(jù)庫(kù)中被定義為 "Other" 或 "Separator" 的字符,例外情況是 ASCII 空格字符 (0x20) 被視作可打印字符。 (請(qǐng)注意在此語(yǔ)境下可打印字符是指當(dāng)對(duì)一個(gè)字符串發(fā)起調(diào)用 repr() 時(shí)不必被轉(zhuǎn)義的字符。 它們與字符串寫入 sys.stdout 或 sys.stderr 時(shí)所需的處理無(wú)關(guān)。)str.isspace()
如果字符串中至少有一個(gè)字符且所有字符均為空白字符則返回真值,否則返回假值。 空白字符是在 Unicode 字符數(shù)據(jù)庫(kù)中被定義為 "Other" 或 "Separator" 并且其雙向特征屬性為 "WS", "B" 或 "S" 之一的字符。str.istitle()
如果字符串中至少有一個(gè)字符且為標(biāo)題字符串則返回真值,例如大寫字符之后只能帶非大寫字符而小寫字符必須有大寫字符打頭。 否則返回假值。str.isupper()
如果字符串中至少有一個(gè)區(qū)分大小寫的字符 , 具此類字符均為大寫則返回真值,否則返回假值。str.join(iterable)
返回一個(gè)由 iterable 中的字符串拼接而成的字符串。 如果 iterable 中存在任何非字符串值包括 bytes 對(duì)象則會(huì)引發(fā) TypeError。 調(diào)用該方法的字符串將作為元素之間的分隔。str.ljust(width[, fillchar])
返回長(zhǎng)度為 width 的字符串,原字符串在其中靠左對(duì)齊。 使用指定的 fillchar 填充空位 (默認(rèn)使用 ASCII 空格符)。 如果 width 小于等于 len(s) 則返回原字符串的副本。str.lower()
返回原字符串的副本,其所有區(qū)分大小寫的字符 4 均轉(zhuǎn)換為小寫。 所用轉(zhuǎn)換小寫算法的描述請(qǐng)參見 Unicode 標(biāo)準(zhǔn)的 3.13 節(jié)。str.lstrip([chars])
返回原字符串的副本,移除其中的前導(dǎo)字符。 chars 參數(shù)為指定要移除字符的字符串。 如果省略或?yàn)?None,則 chars 參數(shù)默認(rèn)移除空格符。 實(shí)際上 chars 參數(shù)并非指定單個(gè)前綴;而是會(huì)移除參數(shù)值的所有組合:
>>> " spacious ".lstrip() "spacious " >>> "www.example.com".lstrip("cmowz.") "example.com"static str.maketrans(x[, y[, z]])
此靜態(tài)方法返回一個(gè)可供 str.translate() 使用的轉(zhuǎn)換對(duì)照表。 如果只有一個(gè)參數(shù),則它必須是一個(gè)將 Unicode 碼位序號(hào)(整數(shù))或字符(長(zhǎng)度為 1 的字符串)映射到 Unicode 碼位序號(hào)、(任意長(zhǎng)度的)字符串或 None 的字典。 字符鍵將會(huì)被轉(zhuǎn)換為碼位序號(hào)。 如果有兩個(gè)參數(shù),則它們必須是兩個(gè)長(zhǎng)度相等的字符串,并且在結(jié)果字典中,x 中每個(gè)字符將被映射到 y 中相同位置的字符。 如果有第三個(gè)參數(shù),它必須是一個(gè)字符串,其中的字符將在結(jié)果中被映射到 None。str.partition(sep)
在 sep 首次出現(xiàn)的位置拆分字符串,返回一個(gè) 3 元組,其中包含分隔符之前的部分、分隔符本身,以及分隔符之后的部分。 如果分隔符未找到,則返回的 3 元組中包含字符本身以及兩個(gè)空字符串。str.replace(old, new[, count])
返回字符串的副本,其中出現(xiàn)的所有子字符串 old 都將被替換為 new。 如果給出了可選參數(shù) count,則只替換前 count 次出現(xiàn)。str.rfind(sub[, start[, end]])
返回子字符串 sub 在字符串內(nèi)被找到的最大(最右)索引,這樣 sub 將包含在 s[start:end] 當(dāng)中。 可選參數(shù) start 與 end 會(huì)被解讀為切片表示法。 如果未找到則返回 -1。str.rindex(sub[, start[, end]])
類似于 rfind(),但在子字符串 sub 未找到時(shí)會(huì)引發(fā) ValueError。str.rjust(width[, fillchar])
返回長(zhǎng)度為 width 的字符串,原字符串在其中靠右對(duì)齊。 使用指定的 fillchar 填充空位 (默認(rèn)使用 ASCII 空格符)。 如果 width 小于等于 len(s) 則返回原字符串的副本。str.rpartition(sep)
在 sep 最后一次出現(xiàn)的位置拆分字符串,返回一個(gè) 3 元組,其中包含分隔符之前的部分、分隔符本身,以及分隔符之后的部分。 如果分隔符未找到,則返回的 3 元組中包含兩個(gè)空字符串以及字符串本身。str.rsplit(sep=None, maxsplit=-1)
返回一個(gè)由字符串內(nèi)單詞組成的列表,使用 sep 作為分隔字符串。 如果給出了 maxsplit,則最多進(jìn)行 maxsplit 次拆分,從 最右邊 開始。 如果 sep 未指定或?yàn)?None,任何空白字符串都會(huì)被作為分隔符。 除了從右邊開始拆分,rsplit() 的其他行為都類似于下文所述的 split()。str.rstrip([chars])
返回原字符串的副本,移除其中的末尾字符。 chars 參數(shù)為指定要移除字符的字符串。 如果省略或?yàn)?None,則 chars 參數(shù)默認(rèn)移除空格符。 實(shí)際上 chars 參數(shù)并非指定單個(gè)后綴;而是會(huì)移除參數(shù)值的所有組合:
>>> " spacious ".rstrip() " spacious" >>> "mississippi".rstrip("ipz") "mississ"str.split(sep=None, maxsplit=-1)
返回一個(gè)由字符串內(nèi)單詞組成的列表,使用 sep 作為分隔字符串。 如果給出了 maxsplit,則最多進(jìn)行 maxsplit 次拆分(因此,列表最多會(huì)有 maxsplit+1 個(gè)元素)。 如果 maxsplit 未指定或?yàn)?-1,則不限制拆分次數(shù)(進(jìn)行所有可能的拆分)。 如果給出了 sep,則連續(xù)的分隔符不會(huì)被組合在一起而是被視為分隔空字符串 (例如 "1,,2".split(",") 將返回 ["1", "", "2"])。 sep 參數(shù)可能由多個(gè)字符組成 (例如 "1<>2<>3".split("<>") 將返回 ["1", "2", "3"])。 使用指定的分隔符拆分空字符串將返回 [""]。 例如:
>>> "1,2,3".split(",") ["1", "2", "3"] >>> "1,2,3".split(",", maxsplit=1) ["1", "2,3"] >>> "1,2,,3,".split(",") ["1", "2", "", "3", ""]
如果 sep 未指定或?yàn)?None,則會(huì)應(yīng)用另一種拆分算法:連續(xù)的空格會(huì)被視為單個(gè)分隔符,其結(jié)果將不包含開頭或末尾的空字符串,如果字符串包含前綴或后綴空格的話。 因此,使用 None 拆分空字符串或僅包含空格的字符串將返回 []。 例如:
>>> "1 2 3".split() ["1", "2", "3"] >>> "1 2 3".split(maxsplit=1) ["1", "2 3"] >>> " 1 2 3 ".split() ["1", "2", "3"]str.splitlines([keepends])
返回由原字符串中各行組成的列表,在行邊界的位置拆分。 結(jié)果列表中不包含行邊界,除非給出了 keepends 且為真值。 此方法會(huì)以下列行邊界進(jìn)行拆分。 特別地,行邊界是 universal newlines 的一個(gè)超集。
在 3.2 版更改: v 和 f 被添加到行邊界列表 例如:
>>> "ab c de fg kl ".splitlines() ["ab c", "", "de fg", "kl"] >>> "ab c de fg kl ".splitlines(keepends=True) ["ab c ", " ", "de fg ", "kl "]
不同于 split(),當(dāng)給出了分隔字符串 sep 時(shí),對(duì)于空字符串此方法將返回一個(gè)空列表,而末尾的換行不會(huì)令結(jié)果中增加額外的行:
>>> "".splitlines() [] >>> "One line ".splitlines() ["One line"]
作為比較,split(" ") 的結(jié)果為:
>>> "".split(" ") [""] >>> "Two lines ".split(" ") ["Two lines", ""]str.startswith(prefix[, start[, end]])
如果字符串以指定的 prefix 開始則返回 True,否則返回 False。 prefix 也可以為由多個(gè)供查找的前綴構(gòu)成的元組。 如果有可選項(xiàng) start,將從所指定位置開始檢查。 如果有可選項(xiàng) end,將在所指定位置停止比較。str.strip([chars])
返回原字符串的副本,移除其中的前導(dǎo)和末尾字符。 chars 參數(shù)為指定要移除字符的字符串。 如果省略或?yàn)?None,則 chars 參數(shù)默認(rèn)移除空格符。 實(shí)際上 chars 參數(shù)并非指定單個(gè)前綴或后綴;而是會(huì)移除參數(shù)值的所有組合:
>>> " spacious ".strip() "spacious" >>> "www.example.com".strip("cmowz.") "example"
最外側(cè)的前導(dǎo)和末尾 chars 參數(shù)值將從字符串中移除。 開頭端的字符的移除將在遇到一個(gè)未包含于 chars 所指定字符集的字符時(shí)停止。 類似的操作也將在結(jié)尾端發(fā)生。 例如:
>>> comment_string = "#....... Section 3.2.1 Issue #32 ......." >>> comment_string.strip(".#! ") "Section 3.2.1 Issue #32"str.swapcase()
返回原字符串的副本,其中大寫字符轉(zhuǎn)換為小寫,反之亦然。 請(qǐng)注意 s.swapcase().swapcase() == s 并不一定為真值。str.title()
返回原字符串的標(biāo)題版本,其中每個(gè)單詞第一個(gè)字母為大寫,其余字母為小寫。 例如:
>>> "Hello world".title() "Hello World"
該算法使用一種簡(jiǎn)單的與語(yǔ)言無(wú)關(guān)的定義,將連續(xù)的字母組合視為單詞。 該定義在多數(shù)情況下都很有效,但它也意味著代表縮寫形式與所有格的撇號(hào)也會(huì)成為單詞邊界,這可能導(dǎo)致不希望的結(jié)果:
>>> "they"re bill"s friends from the UK".title() "They"Re Bill"S Friends From The Uk"
可以使用正則表達(dá)式來(lái)構(gòu)建針對(duì)撇號(hào)的特別處理:
>>> import re >>> def titlecase(s): ... return re.sub(r"[A-Za-z]+("[A-Za-z]+)?", ... lambda mo: mo.group(0)[0].upper() + ... mo.group(0)[1:].lower(), ... s) ... >>> titlecase("they"re bill"s friends.") "They"re Bill"s Friends."str.translate(table)
返回原字符串的副本,其中每個(gè)字符按給定的轉(zhuǎn)換表進(jìn)行映射。 轉(zhuǎn)換表必須是一個(gè)使用 __getitem__() 來(lái)實(shí)現(xiàn)索引操作的對(duì)象,通常為 mapping 或 sequence。 當(dāng)以 Unicode 碼位序號(hào)(整數(shù))為索引時(shí),轉(zhuǎn)換表對(duì)象可以做以下任何一種操作:返回 Unicode 序號(hào)或字符串,將字符映射為一個(gè)或多個(gè)字符;返回 None,將字符從結(jié)果字符串中刪除;或引發(fā) LookupError 異常,將字符映射為其自身。 你可以使用 str.maketrans() 基于不同格式的字符到字符映射來(lái)創(chuàng)建一個(gè)轉(zhuǎn)換映射表。 另請(qǐng)參閱 codecs 模塊以了解定制字符映射的更靈活方式。str.upper()
返回原字符串的副本,其中所有區(qū)分大小寫的字符 4 均轉(zhuǎn)換為大寫。 請(qǐng)注意如果 s 包含不區(qū)分大小寫的字符或者如果結(jié)果字符的 Unicode 類別不是 "Lu" (Letter, uppercase) 而是 "Lt" (Letter, titlecase) 則 s.upper().isupper() 有可能為 False。 所用轉(zhuǎn)換大寫算法的描述請(qǐng)參見 Unicode 標(biāo)準(zhǔn)的 3.13 節(jié)。str.zfill(width)
返回原字符串的副本,在左邊填充 ASCII "0" 數(shù)碼使其長(zhǎng)度變?yōu)?width。 正負(fù)值前綴 ("+"/"-") 的處理方式是在正負(fù)符號(hào) 之后 填充而非在之前。 如果 width 小于等于 len(s) 則返回原字符串的副本。 例如:
>>> "42".zfill(5) "00042" >>> "-42".zfill(5) "-0042"printf 風(fēng)格的字符串格式化
注解
此處介紹的格式化操作具有多種怪異特性,可能導(dǎo)致許多常見錯(cuò)誤(例如無(wú)法正確顯示元組和字典)。 使用較新的 格式化字符串字面值,str.format() 接口或 模板字符串 有助于避免這樣的錯(cuò)誤。 這些替代方案中的每一種都更好地權(quán)衡并提供了簡(jiǎn)單、靈活以及可擴(kuò)展性優(yōu)勢(shì)。
字符串具有一種特殊的內(nèi)置操作:使用 % (取模) 運(yùn)算符。 這也被稱為字符串的 格式化 或 插值 運(yùn)算符。 對(duì)于 format % values (其中 format 為一個(gè)字符串),在 format 中的 % 轉(zhuǎn)換標(biāo)記符將被替換為零個(gè)或多個(gè) values 條目。 其效果類似于在 C 語(yǔ)言中使用 sprintf()。
如果 format 要求一個(gè)多帶帶參數(shù),則 values 可以為一個(gè)非元組對(duì)象。 否則的話,values 必須或者是一個(gè)包含項(xiàng)數(shù)與格式字符串中指定的轉(zhuǎn)換符項(xiàng)數(shù)相同的元組,或者是一個(gè)多帶帶映射對(duì)象(例如字典)。
轉(zhuǎn)換標(biāo)記符包含兩個(gè)或更多字符并具有以下組成,且必須遵循此處規(guī)定的順序:
"%" 字符,用于標(biāo)記轉(zhuǎn)換符的起始。
映射鍵(可選),由加圓括號(hào)的字符序列組成 (例如 (somename))。
轉(zhuǎn)換旗標(biāo)(可選),用于影響某些轉(zhuǎn)換類型的結(jié)果。
最小字段寬度(可選)。 如果指定為 "*" (星號(hào)),則實(shí)際寬度會(huì)從 values 元組的下一元素中讀取,要轉(zhuǎn)換的對(duì)象則為最小字段寬度和可選的精度之后的元素。
精度(可選),以在 "." (點(diǎn)號(hào)) 之后加精度值的形式給出。 如果指定為 "*" (星號(hào)),則實(shí)際精度會(huì)從 values 元組的下一元素中讀取,要轉(zhuǎn)換的對(duì)象則為精度之后的元素。
長(zhǎng)度修飾符(可選)。
轉(zhuǎn)換類型。
當(dāng)右邊的參數(shù)為一個(gè)字典(或其他映射類型)時(shí),字符串中的格式 必須 包含加圓括號(hào)的映射鍵,對(duì)應(yīng) "%" 字符之后字典中的每一項(xiàng)。 映射鍵將從映射中選取要格式化的值。 例如:
>>> print("%(language)s has %(number)03d quote types." % ... {"language": "Python", "number": 2}) Python has 002 quote types.
在此情況下格式中不能出現(xiàn) * 標(biāo)記符(因其需要一個(gè)序列類的參數(shù)列表)。
轉(zhuǎn)換旗標(biāo)為:
可以給出長(zhǎng)度修飾符 (h, l 或 L),但會(huì)被忽略,因?yàn)閷?duì) Python 來(lái)說沒有必要 -- 所以 %ld 等價(jià)于 %d。
轉(zhuǎn)換類型為:
![圖片上傳中...]
注釋:
此替代形式會(huì)在第一個(gè)數(shù)碼之前插入標(biāo)示八進(jìn)制數(shù)的前綴 ("0o")。
此替代形式會(huì)在第一個(gè)數(shù)碼之前插入 "0
取決于是使用 "x" 還是 "X" 格式)。
此替代形式總是會(huì)在結(jié)果中包含一個(gè)小數(shù)點(diǎn),即使其后并沒有數(shù)碼。
小數(shù)點(diǎn)后的數(shù)碼位數(shù)由精度決定,默認(rèn)為 6。
此替代形式總是會(huì)在結(jié)果中包含一個(gè)小數(shù)點(diǎn),末尾各位的零不會(huì)如其他情況下那樣被移除。
小數(shù)點(diǎn)前后的有效數(shù)碼位數(shù)由精度決定,默認(rèn)為 6。
7; 如果精度為 N,輸出將截短為 N 個(gè)字符。
參見 PEP 237。
由于 Python 字符串顯式指明長(zhǎng)度,%s 轉(zhuǎn)換不會(huì)將 "0" 視為字符串的結(jié)束。
在 3.1 版更改: 絕對(duì)值超過 1e50 的 %f 轉(zhuǎn)換不會(huì)再被替換為 %g 轉(zhuǎn)換。
上一篇文章:Python標(biāo)準(zhǔn)庫(kù)---11、內(nèi)置類型:迭代器類型、序列類型(list-typle-range)
下一篇文章:Python標(biāo)準(zhǔn)庫(kù)---13、內(nèi)置類型:二進(jìn)制序列類型 ( bytes, bytearray, memoryview)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/43974.html
摘要:上一篇文章標(biāo)準(zhǔn)庫(kù)內(nèi)置類型數(shù)字類型下一篇文章標(biāo)準(zhǔn)庫(kù)內(nèi)置類型文本序列類型迭代器類型支持在容器中進(jìn)行迭代的概念。該對(duì)象需要支持下文所述的迭代器協(xié)議。這是同時(shí)允許容器和迭代器配合和語(yǔ)句使用所必須的。 上一篇文章:Python標(biāo)準(zhǔn)庫(kù)---10、內(nèi)置類型:數(shù)字類型下一篇文章:Python標(biāo)準(zhǔn)庫(kù)---12、內(nèi)置類型:文本序列類型(str) ## 迭代器類型Python 支持在容器中進(jìn)行迭代的概念。...
摘要:上一篇文章標(biāo)準(zhǔn)庫(kù)內(nèi)置函數(shù)下一篇文章標(biāo)準(zhǔn)庫(kù)內(nèi)置函數(shù)內(nèi)置函數(shù)返回對(duì)象的長(zhǎng)度元素個(gè)數(shù)。對(duì)表示單個(gè)字符的字符串,返回代表它碼點(diǎn)的整數(shù)。上一篇文章標(biāo)準(zhǔn)庫(kù)內(nèi)置函數(shù)下一篇文章標(biāo)準(zhǔn)庫(kù)內(nèi)置函數(shù) 上一篇文章:Python標(biāo)準(zhǔn)庫(kù)---3、內(nèi)置函數(shù)(G-H-I-J-K)下一篇文章:Python標(biāo)準(zhǔn)庫(kù)---5、內(nèi)置函數(shù)(P-K-R) 內(nèi)置函數(shù): showImg(https://segmentfault.com...
摘要:第行把具名元組以的形式返回。對(duì)序列使用和通常號(hào)兩側(cè)的序列由相同類型的數(shù)據(jù)所構(gòu)成當(dāng)然不同類型的也可以相加,返回一個(gè)新序列。從上面的結(jié)果可以看出,它雖拋出了異常,但仍完成了操作查看字節(jié)碼并不難,而且它對(duì)我們了解代碼背后的運(yùn)行機(jī)制很有幫助。 《流暢的Python》筆記。接下來(lái)的三篇都是關(guān)于Python的數(shù)據(jù)結(jié)構(gòu),本篇主要是Python中的各序列類型 1. 內(nèi)置序列類型概覽 Python標(biāo)準(zhǔn)庫(kù)...
摘要:上一篇文章標(biāo)準(zhǔn)庫(kù)內(nèi)置函數(shù)下一篇文章標(biāo)準(zhǔn)庫(kù)內(nèi)置函數(shù)內(nèi)置函數(shù)返回一個(gè)新的對(duì)象,可以選擇帶有從獲取的元素。推薦使用內(nèi)置函數(shù)來(lái)檢測(cè)對(duì)象的類型,因?yàn)樗鼤?huì)考慮子類的情況。上一篇文章標(biāo)準(zhǔn)庫(kù)內(nèi)置函數(shù)下一篇文章標(biāo)準(zhǔn)庫(kù)內(nèi)置函數(shù) 上一篇文章:Python標(biāo)準(zhǔn)庫(kù)---5、內(nèi)置函數(shù)(P-K-R)下一篇文章:Python標(biāo)準(zhǔn)庫(kù)---7、內(nèi)置函數(shù)(V-W-X-Y-Z) 內(nèi)置函數(shù): showImg(https://...
摘要:上一篇文章標(biāo)準(zhǔn)庫(kù)內(nèi)置類型文本序列類型下一篇文章二進(jìn)制序列類型操作二進(jìn)制數(shù)據(jù)的核心內(nèi)置類型是和。另請(qǐng)參見內(nèi)置類型。存在一個(gè)反向轉(zhuǎn)換函數(shù),可以將對(duì)象轉(zhuǎn)換為對(duì)應(yīng)的十六進(jìn)制表示。返回子序列在范圍內(nèi)非重疊出現(xiàn)的次數(shù)。 上一篇文章:Python標(biāo)準(zhǔn)庫(kù)---12、內(nèi)置類型:文本序列類型(str)下一篇文章: 二進(jìn)制序列類型 --- bytes, bytearray, memoryview 操作二進(jìn)制...
閱讀 2628·2021-10-08 10:04
閱讀 2743·2021-09-06 15:02
閱讀 822·2019-08-30 13:50
閱讀 1555·2019-08-30 13:21
閱讀 2594·2019-08-30 11:15
閱讀 2120·2019-08-29 17:19
閱讀 1585·2019-08-26 13:55
閱讀 1264·2019-08-26 10:15