上一篇文章: Python標準庫---十一、內置類型:迭代器類型、序列類型(list-typle-range)
下一篇文章: Python標準庫---1三、內置類型:二進制序列類型 ( bytes, bytearray, memoryview)
在 Python 中處理文本數據是使用 str 對象,也稱爲 字符串。 字符串是由 Unicode 碼位構成的不可變 序列。 字符串字面值有多種不一樣的寫法:git
單引號: '容許包含有 "雙" 引號' 雙引號: "容許包含有 '單' 引號"。 三重引號: '''三重單引號''', """三重雙引號"""
使用三重引號的字符串能夠跨越多行 —— 其中全部的空白字符都將包含在該字符串字面值中。正則表達式
做爲單一表達式組成部分,之間只由空格分隔的多個字符串字面值會被隱式地轉換爲單個字符串字面值。 也就是說,("spam " "eggs") == "spam eggs"。算法
請參閱 字符串和字節串字面值 有解有關不一樣字符串字面值的更多信息,包括所支持的轉義序列,以及使用 r ("raw") 前綴來禁用大多數轉義序列的處理。數據庫
字符串也能夠經過使用 str 構造器從其餘對象建立。segmentfault
因爲不存在單獨的「字符」類型,對字符串作索引操做將產生一個長度爲 1 的字符串。 也就是說,對於一個非空字符串 s, s[0] == s[0:1]。api
不存在可變的字符串類型,可是 str.join() 或 io.StringIO 能夠被用來根據多個片斷高效率地構建字符串。app
在 3.3 版更改: 爲了與 Python 2 系列的向下兼容,再次容許字符串字面值使用 u 前綴。 它對字符串字面值的含義沒有影響,而且不能與 r 前綴同時出現。ide
返回 object 的 字符串 版本。 若是未提供 object 則返回空字符串。 在其餘狀況下 str() 的行爲取決於 encoding 或 errors 是否有給出,具體見下。 若是 encoding 或 errors 均未給出,str(object) 返回 object.__str__(),這是 object 的「非正式」或格式良好的字符串表示。 對於字符串對象,這是該字符串自己。 若是 object 沒有 __str__() 方法,則 str() 將回退爲返回 repr(object)。 若是 encoding 或 errors 至少給出其中之一,則 object 應該是一個 bytes-like object (例如 bytes 或 bytearray)。 在此狀況下,若是 object 是一個 bytes (或 bytearray) 對象,則 str(bytes, encoding, errors) 等價於 bytes.decode(encoding, errors)。 不然的話,會在調用 bytes.decode() 以前獲取緩衝區對象下層的 bytes 對象。 請參閱 二進制序列類型 --- bytes, bytearray, memoryview 與 緩衝協議 瞭解有關緩衝區對象的信息。 將一個 bytes 對象傳入 str() 而不給出 encoding 或 errors 參數的操做屬於第一種狀況, 將返回非正式的字符串表示(另請參閱 Python 的 -b 命令行選項)。 例如:
>>> str(b'Zoot!') "b'Zoot!'"
有關 str 類及其方法的更多信息,請參閱下面的 文本序列類型 --- str 和 字符串的方法 小節。 要輸出格式化字符串,請參閱 格式化字符串字面值 和 格式字符串語法 小節。 此外還能夠參閱 文本處理服務 小節。
字符串實現了全部 通常 序列的操做,還額外提供瞭如下列出的一些附加方法。函數
字符串還支持兩種字符串格式化樣式,一種提供了很大程度的靈活性和可定製性 (參閱 str.format(), 格式字符串語法 和 自定義字符串格式化) 而另外一種是基於 C printf 樣式的格式化,它可處理的類型範圍較窄,而且更難以正確使用,但對於它可處理的狀況每每會更爲快速 (printf 風格的字符串格式化)。工具
標準庫的 文本處理服務 部分涵蓋了許多其餘模塊,提供各類文本相關工具(例如包含於 re 模塊中的正則表達式支持)。
返回原字符串的副本,其首個字符大寫,其他爲小寫。
返回原字符串消除大小寫的副本。 消除大小寫的字符串可用於忽略大小寫的匹配。 消除大小寫相似於轉爲小寫,可是更加完全一些,由於它會移除字符串中的全部大小寫變化形式。 例如,德語小寫字母 'ß' 至關於 "ss"。 因爲它已是小寫了,lower() 不會對 'ß' 作任何改變;而 casefold() 則會將其轉換爲 "ss"。 消除大小寫算法的描述請參見 Unicode 標準的 3.13 節。 3.3 新版功能.
返回長度爲 width 的字符串,原字符串在其正中。 使用指定的 fillchar 填充兩邊的空位(默認使用 ASCII 空格符)。 若是 width 小於等於 len(s) 則返回原字符串的副本。
反回子字符串 sub 在 [start, end] 範圍內非重疊出現的次數。 可選參數 start 與 end 會被解讀爲切片表示法。
返回原字符串編碼爲字節串對象的版本。 默認編碼爲 'utf-8'。 能夠給出 errors 來設置不一樣的錯誤處理方案。 errors 的默認值爲 'strict',表示編碼錯誤會引起 UnicodeError。 其餘可用的值爲 'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 以及任何其餘經過 codecs.register_error() 註冊的值,請參閱 Error Handlers 小節。 要查看可用的編碼列表,請參閱 標準編碼 小節。 在 3.1 版更改: 加入了對關鍵字參數的支持。
若是字符串以指定的 suffix 結束返回 True,不然返回 False。 suffix 也能夠爲由多個供查找的後綴構成的元組。 若是有可選項 start,將從所指定位置開始檢查。 若是有可選項 end,將在所指定位置中止比較。
返回字符串的副本,其中全部的製表符會由一個或多個空格替換,具體取決於當前列位置和給定的製表符寬度。 每 tabsize 個字符設爲一個製表位(默認值 8 時設定的製表位在列 0, 8, 16 依次類推)。 要展開字符串,當前列將被設爲零並逐一檢查字符串中的每一個字符。 若是字符爲製表符 (\t),則會在結果中插入一個或多個空格符,直到當前列等於下一個製表位。 (製表符自己不會被複制。) 若是字符爲換行符 (\n) 或回車符 (\r),它會被複制並將當前列重設爲零。 任何其餘字符會被不加修改地複製並將當前列加一,不論該字符在被打印時會如何顯示。
>>> '01\t012\t0123\t01234'.expandtabs() '01 012 0123 01234' >>> '01\t012\t0123\t01234'.expandtabs(4) '01 012 0123 01234'
返回子字符串 sub 在 s[start:end] 切片內被找到的最小索引。 可選參數 start 與 end 會被解讀爲切片表示法。 若是 sub 未被找到則返回 -1。 註解 find() 方法應該只在你須要知道 sub 所在位置時使用。 要檢查 sub 是否爲子字符串,請使用 in 操做符:
>>> 'Py' in 'Python' True
執行字符串格式化操做。 調用此方法的字符串能夠包含字符串字面值或者以花括號 {} 括起來的替換域。 每一個替換域能夠包含一個位置參數的數字索引,或者一個關鍵字參數的名稱。 返回的字符串副本中每一個替換域都會被替換爲對應參數的字符串值。
>>> "The sum of 1 + 2 is {0}".format(1+2) 'The sum of 1 + 2 is 3'
請參閱 格式字符串語法 瞭解有關能夠在格式字符串中指定的各類格式選項的說明。
註解當使用 n 類型 (例如: '{:n}'.format(1234)) 來格式化數字 (int, float, complex, decimal.Decimal 及其子類) 的時候,該函數會臨時性地將 LC_CTYPE 區域設置爲 LC_NUMERIC 區域以解碼 localeconv() 的 decimal_point 和 thousands_sep 字段,若是它們是非 ASCII 字符或長度超過 1 字節的話,而且 LC_NUMERIC 區域會與 LC_CTYPE 區域不一致。 這個臨時更改會影響其餘線程。
在 3.7 版更改: 當使用 n 類型格式化數字時,該函數在某些狀況下會臨時性地將 LC_CTYPE 區域設置爲 LC_NUMERIC 區域。
相似於 str.format(**mapping),不一樣之處在於 mapping 會被直接使用而不是複製到一個 dict。 適宜使用此方法的一個例子是當 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 新版功能.
相似於 find(),但在找不到子類時會引起 ValueError。
若是字符串中至少有一個字符且全部字符均爲字母或數字則返回真值,不然返回假值。 若是如下方法中的一個返回 True 則字符 c 爲字母或數字: c.isalpha(), c.isdecimal(), c.isdigit(), or c.isnumeric()。
若是字符串中至少有一個字符且全部字符均爲字母則返回真值,不然返回假值。 字母類字符是在 Unicode 字符數據庫中被定義爲 "Letter" 的字符,即通常分類特徵屬性爲 "Lm", "Lt", "Lu", "Ll" 或 "Lo" 其中之一。 請注意這不一樣於 Unicode 標準所定義的 "Alphabetic" 特徵屬性。
若是字符串爲空或全部字符均爲 ASCII 字符則返回真值,不然返回假值。 ASCII 字符的碼位範圍爲 U+0000-U+007F。 3.7 新版功能.
若是字符串中至少有一個字符且全部字符均爲十進制數字符則返回真值,不然返回假值。 十進制數字符是以 10 爲基數的計數制會用來組成數值的字符,例如 U+0660, ARABIC-INDIC DIGIT ZERO。 正式的定義爲:十進制數字符就是 Unicode 通常分類 "Nd" 中的字符。
若是字符串中至少有一個字符且全部字符均爲數字字符則返回真值,不然返回假值。 數字字符包括十進制數字符和須要特別處理的數字,例如兼容性上標數字。 這也涵蓋了不能被用來組成以 10 爲基數的數值的數字,例如 Kharosthi 數字。 正式的定義爲:數字字符就是特徵屬性值 Numeric_Type=Digit 或 Numeric_Type=Decimal 的字符。
若是字符串根據語言定義屬於有效的標識符則返回真值,參見 標識符和關鍵字。 請使用 keyword.iskeyword() 來檢測保留標識符,例如 def 和 class。
若是字符串中至少有一個區分大小寫的字符 且此類字符均爲小寫則返回真值,不然返回假值。
若是字符串中至少有一個字符且全部字符均爲數值字符則返回真值,不然返回假值。 數值字符包括數字字符,以及全部在 Unicode 中設置了數值特性屬性的字符,例如 U+2155, VULGAR FRACTION ONE FIFTH。 正式的定義爲:數值字符就是具備特徵屬性值 Numeric_Type=Digit, Numeric_Type=Decimal 或 Numeric_Type=Numeric 的字符。
若是字符串中全部字符均爲可打印字符或字符串爲空則返回真值,不然返回假值。 不可打印字符是在 Unicode 字符數據庫中被定義爲 "Other" 或 "Separator" 的字符,例外狀況是 ASCII 空格字符 (0x20) 被視做可打印字符。 (請注意在此語境下可打印字符是指當對一個字符串發起調用 repr() 時沒必要被轉義的字符。 它們與字符串寫入 sys.stdout 或 sys.stderr 時所需的處理無關。)
若是字符串中至少有一個字符且全部字符均爲空白字符則返回真值,不然返回假值。 空白字符是在 Unicode 字符數據庫中被定義爲 "Other" 或 "Separator" 而且其雙向特徵屬性爲 "WS", "B" 或 "S" 之一的字符。
若是字符串中至少有一個字符且爲標題字符串則返回真值,例如大寫字符以後只能帶非大寫字符而小寫字符必須有大寫字符打頭。 不然返回假值。
若是字符串中至少有一個區分大小寫的字符 , 具此類字符均爲大寫則返回真值,不然返回假值。
返回一個由 iterable 中的字符串拼接而成的字符串。 若是 iterable 中存在任何非字符串值包括 bytes 對象則會引起 TypeError。 調用該方法的字符串將做爲元素之間的分隔。
返回長度爲 width 的字符串,原字符串在其中靠左對齊。 使用指定的 fillchar 填充空位 (默認使用 ASCII 空格符)。 若是 width 小於等於 len(s) 則返回原字符串的副本。
返回原字符串的副本,其全部區分大小寫的字符 4 均轉換爲小寫。 所用轉換小寫算法的描述請參見 Unicode 標準的 3.13 節。
返回原字符串的副本,移除其中的前導字符。 chars 參數爲指定要移除字符的字符串。 若是省略或爲 None,則 chars 參數默認移除空格符。 實際上 chars 參數並不是指定單個前綴;而是會移除參數值的全部組合:
>>> ' spacious '.lstrip() 'spacious ' >>> 'www.example.com'.lstrip('cmowz.') 'example.com'
此靜態方法返回一個可供 str.translate() 使用的轉換對照表。 若是隻有一個參數,則它必須是一個將 Unicode 碼位序號(整數)或字符(長度爲 1 的字符串)映射到 Unicode 碼位序號、(任意長度的)字符串或 None 的字典。 字符鍵將會被轉換爲碼位序號。 若是有兩個參數,則它們必須是兩個長度相等的字符串,而且在結果字典中,x 中每一個字符將被映射到 y 中相同位置的字符。 若是有第三個參數,它必須是一個字符串,其中的字符將在結果中被映射到 None。
在 sep 首次出現的位置拆分字符串,返回一個 3 元組,其中包含分隔符以前的部分、分隔符自己,以及分隔符以後的部分。 若是分隔符未找到,則返回的 3 元組中包含字符自己以及兩個空字符串。
返回字符串的副本,其中出現的全部子字符串 old 都將被替換爲 new。 若是給出了可選參數 count,則只替換前 count 次出現。
返回子字符串 sub 在字符串內被找到的最大(最右)索引,這樣 sub 將包含在 s[start:end] 當中。 可選參數 start 與 end 會被解讀爲切片表示法。 若是未找到則返回 -1。
相似於 rfind(),但在子字符串 sub 未找到時會引起 ValueError。
返回長度爲 width 的字符串,原字符串在其中靠右對齊。 使用指定的 fillchar 填充空位 (默認使用 ASCII 空格符)。 若是 width 小於等於 len(s) 則返回原字符串的副本。
在 sep 最後一次出現的位置拆分字符串,返回一個 3 元組,其中包含分隔符以前的部分、分隔符自己,以及分隔符以後的部分。 若是分隔符未找到,則返回的 3 元組中包含兩個空字符串以及字符串自己。
返回一個由字符串內單詞組成的列表,使用 sep 做爲分隔字符串。 若是給出了 maxsplit,則最多進行 maxsplit 次拆分,從 最右邊 開始。 若是 sep 未指定或爲 None,任何空白字符串都會被做爲分隔符。 除了從右邊開始拆分,rsplit() 的其餘行爲都相似於下文所述的 split()。
返回原字符串的副本,移除其中的末尾字符。 chars 參數爲指定要移除字符的字符串。 若是省略或爲 None,則 chars 參數默認移除空格符。 實際上 chars 參數並不是指定單個後綴;而是會移除參數值的全部組合:
>>> ' spacious '.rstrip() ' spacious' >>> 'mississippi'.rstrip('ipz') 'mississ'
返回一個由字符串內單詞組成的列表,使用 sep 做爲分隔字符串。 若是給出了 maxsplit,則最多進行 maxsplit 次拆分(所以,列表最多會有 maxsplit+1 個元素)。 若是 maxsplit 未指定或爲 -1,則不限制拆分次數(進行全部可能的拆分)。 若是給出了 sep,則連續的分隔符不會被組合在一塊兒而是被視爲分隔空字符串 (例如 '1,,2'.split(',') 將返回 ['1', '', '2'])。 sep 參數可能由多個字符組成 (例如 '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 未指定或爲 None,則會應用另外一種拆分算法:連續的空格會被視爲單個分隔符,其結果將不包含開頭或末尾的空字符串,若是字符串包含前綴或後綴空格的話。 所以,使用 None 拆分空字符串或僅包含空格的字符串將返回 []。 例如:
>>> '1 2 3'.split() ['1', '2', '3'] >>> '1 2 3'.split(maxsplit=1) ['1', '2 3'] >>> ' 1 2 3 '.split() ['1', '2', '3']
返回由原字符串中各行組成的列表,在行邊界的位置拆分。 結果列表中不包含行邊界,除非給出了 keepends 且爲真值。 此方法會如下列行邊界進行拆分。 特別地,行邊界是 universal newlines 的一個超集。
在 3.2 版更改: \v 和 \f 被添加到行邊界列表 例如:
>>> 'ab c\n\nde fg\rkl\r\n'.splitlines() ['ab c', '', 'de fg', 'kl'] >>> 'ab c\n\nde fg\rkl\r\n'.splitlines(keepends=True) ['ab c\n', '\n', 'de fg\r', 'kl\r\n']
不一樣於 split(),當給出了分隔字符串 sep 時,對於空字符串此方法將返回一個空列表,而末尾的換行不會令結果中增長額外的行:
>>> "".splitlines() [] >>> "One line\n".splitlines() ['One line']
做爲比較,split('\n') 的結果爲:
>>> ''.split('\n') [''] >>> 'Two lines\n'.split('\n') ['Two lines', '']
若是字符串以指定的 prefix 開始則返回 True,不然返回 False。 prefix 也能夠爲由多個供查找的前綴構成的元組。 若是有可選項 start,將從所指定位置開始檢查。 若是有可選項 end,將在所指定位置中止比較。
返回原字符串的副本,移除其中的前導和末尾字符。 chars 參數爲指定要移除字符的字符串。 若是省略或爲 None,則 chars 參數默認移除空格符。 實際上 chars 參數並不是指定單個前綴或後綴;而是會移除參數值的全部組合:
>>> ' spacious '.strip() 'spacious' >>> 'www.example.com'.strip('cmowz.') 'example'
最外側的前導和末尾 chars 參數值將從字符串中移除。 開頭端的字符的移除將在遇到一個未包含於 chars 所指定字符集的字符時中止。 相似的操做也將在結尾端發生。 例如:
>>> comment_string = '#....... Section 3.2.1 Issue #32 .......' >>> comment_string.strip('.#! ') 'Section 3.2.1 Issue #32'
返回原字符串的副本,其中大寫字符轉換爲小寫,反之亦然。 請注意 s.swapcase().swapcase() == s 並不必定爲真值。
返回原字符串的標題版本,其中每一個單詞第一個字母爲大寫,其他字母爲小寫。 例如:
>>> 'Hello world'.title() 'Hello World'
該算法使用一種簡單的與語言無關的定義,將連續的字母組合視爲單詞。 該定義在多數狀況下都頗有效,但它也意味着表明縮寫形式與全部格的撇號也會成爲單詞邊界,這可能致使不但願的結果:
>>> "they're bill's friends from the UK".title() "They'Re Bill'S Friends From The Uk"
可使用正則表達式來構建針對撇號的特別處理:
>>> 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."
返回原字符串的副本,其中每一個字符按給定的轉換表進行映射。 轉換表必須是一個使用 __getitem__() 來實現索引操做的對象,一般爲 mapping 或 sequence。 當以 Unicode 碼位序號(整數)爲索引時,轉換表對象能夠作如下任何一種操做:返回 Unicode 序號或字符串,將字符映射爲一個或多個字符;返回 None,將字符從結果字符串中刪除;或引起 LookupError 異常,將字符映射爲其自身。 你可使用 str.maketrans() 基於不一樣格式的字符到字符映射來建立一個轉換映射表。 另請參閱 codecs 模塊以瞭解定製字符映射的更靈活方式。
返回原字符串的副本,其中全部區分大小寫的字符 4 均轉換爲大寫。 請注意若是 s 包含不區分大小寫的字符或者若是結果字符的 Unicode 類別不是 "Lu" (Letter, uppercase) 而是 "Lt" (Letter, titlecase) 則 s.upper().isupper() 有可能爲 False。 所用轉換大寫算法的描述請參見 Unicode 標準的 3.13 節。
返回原字符串的副本,在左邊填充 ASCII '0' 數碼使其長度變爲 width。 正負值前綴 ('+'/'-') 的處理方式是在正負符號 以後 填充而非在以前。 若是 width 小於等於 len(s) 則返回原字符串的副本。 例如:
>>> "42".zfill(5) '00042' >>> "-42".zfill(5) '-0042'
註解
此處介紹的格式化操做具備多種怪異特性,可能致使許多常見錯誤(例如沒法正確顯示元組和字典)。 使用較新的 格式化字符串字面值,str.format() 接口或 模板字符串 有助於避免這樣的錯誤。 這些替代方案中的每一種都更好地權衡並提供了簡單、靈活以及可擴展性優點。
字符串具備一種特殊的內置操做:使用 % (取模) 運算符。 這也被稱爲字符串的 格式化 或 插值 運算符。 對於 format % values (其中 format 爲一個字符串),在 format 中的 % 轉換標記符將被替換爲零個或多個 values 條目。 其效果相似於在 C 語言中使用 sprintf()。
若是 format 要求一個單獨參數,則 values 能夠爲一個非元組對象。 不然的話,values 必須或者是一個包含項數與格式字符串中指定的轉換符項數相同的元組,或者是一個單獨映射對象(例如字典)。
轉換標記符包含兩個或更多字符並具備如下組成,且必須遵循此處規定的順序:
最小字段寬度(可選)。 若是指定爲 '*' (星號),則實際寬度會從 values 元組的下一元素中讀取,要轉換的對象則爲最小字段寬度和可選的精度以後的元素。
當右邊的參數爲一個字典(或其餘映射類型)時,字符串中的格式 必須 包含加圓括號的映射鍵,對應 '%' 字符以後字典中的每一項。 映射鍵將從映射中選取要格式化的值。 例如:
>>> print('%(language)s has %(number)03d quote types.' % ... {'language': "Python", "number": 2}) Python has 002 quote types.
在此狀況下格式中不能出現 * 標記符(因其須要一個序列類的參數列表)。
轉換旗標爲:
能夠給出長度修飾符 (h, l 或 L),但會被忽略,由於對 Python 來講沒有必要 -- 因此 %ld 等價於 %d。
轉換類型爲:
![圖片上傳中...]
註釋:
取決因而使用 'x' 仍是 'X' 格式)。
7; 若是精度爲 N,輸出將截短爲 N 個字符。
參見 PEP 237。
因爲 Python 字符串顯式指明長度,%s 轉換不會將 '0' 視爲字符串的結束。
在 3.1 版更改: 絕對值超過 1e50 的 %f 轉換不會再被替換爲 %g 轉換。
上一篇文章: Python標準庫---十一、內置類型:迭代器類型、序列類型(list-typle-range)
下一篇文章: Python標準庫---1三、內置類型:二進制序列類型 ( bytes, bytearray, memoryview)