摘要:上一篇文章標準庫內置類型文本序列類型下一篇文章二進制序列類型操作二進制數據的核心內置類型是和。另請參見內置類型。存在一個反向轉換函數,可以將對象轉換為對應的十六進制表示。返回子序列在范圍內非重疊出現的次數。
上一篇文章:Python標準庫---12、內置類型:文本序列類型(str)二進制序列類型 --- bytes, bytearray, memoryview
下一篇文章:
操作二進制數據的核心內置類型是 bytes 和 bytearray。 它們由 memoryview 提供支持,該對象使用 緩沖區協議 來訪問其他二進制對象所在內存,不需要創建對象的副本。
array 模塊支持高效地存儲基本數據類型,例如 32 位整數和 IEEE754 雙精度浮點值。
bytes 對象bytes 對象是由單個字節構成的不可變序列。 由于許多主要二進制協議都基于 ASCII 文本編碼,因此 bytes 對象提供了一些僅在處理 ASCII 兼容數據時可用,并且在許多特性上與字符串對象緊密相關的方法。
class bytes([source[, encoding[, errors]]])首先,表示 bytes 字面值的語法與字符串字面值的大致相同,只是添加了一個 b 前綴: 單引號: b"同樣允許嵌入 "雙" 引號"。 雙引號: b"同樣允許嵌入 "單" 引號"。 三重引號: b"""三重單引號""", b"""三重雙引號""" bytes 字面值中只允許 ASCII 字符(無論源代碼聲明的編碼為何)。 任何超出 127 的二進制值必須使用相應的轉義序列形式加入 bytes 字面值。 像字符串字面值一樣,bytes 字面值也可以使用 r 前綴來禁用轉義序列處理。 請參閱 字符串和字節串字面值 了解有關各種 bytes 字面值形式的詳情,包括所支持的轉義序列。 雖然 bytes 字面值和表示法是基于 ASCII 文本的,但 bytes 對象的行為實際上更像是不可變的整數序列,序列中的每個值的大小被限制為 0 <= x < 256 (如果違反此限制將引發 ValueError)。 這種限制是有意設計用以強調以下事實,雖然許多二進制格式都包含基于 ASCII 的元素,可以通過某些面向文本的算法進行有用的操作,但情況對于任意二進制數據來說通常卻并非如此(盲目地將文本處理算法應用于不兼容 ASCII 的二進制數據格式往往將導致數據損壞)。 除了字面值形式,bytes 對象還可以通過其他幾種方式來創建:
指定長度的以零值填充的 bytes 對象: bytes(10)
通過由整數組成的可迭代對象: bytes(range(20))
通過緩沖區協議復制現有的二進制數據: bytes(obj)
另請參閱 bytes 內置類型。
由于兩個十六進制數碼精確對應一個字節,因此十六進制數是描述二進制數據的常用格式。 相應地,bytes 類型具有從此種格式讀取數據的附加類方法:
classmethod fromhex(string)此 bytes 類方法返回一個解碼給定字符串的 bytes 對象。 字符串必須由表示每個字節的兩個十六進制數碼構成,其中的 ASCII 空白符會被忽略。 >>> bytes.fromhex("2Ef0 F1f2 ") b".xf0xf1xf2" 在 3.7 版更改: bytes.fromhex() 現在會忽略所有 ASCII 空白符而不只是空格符。 存在一個反向轉換函數,可以將 bytes 對象轉換為對應的十六進制表示。hex()
返回一個字符串對象,該對象包含實例中每個字節的兩個十六進制數字。 >>> b"xf0xf1xf2".hex() "f0f1f2" 3.5 新版功能.
由于 bytes 對象是由整數構成的序列(類似于元組),因此對于一個 bytes 對象 b,b[0] 將為一個整數,而 b[0:1] 將為一個長度為 1 的 bytes 對象。 (這與文本字符串不同,索引和切片所產生的將都是一個長度為 1 的字符串)。
bytes 對象的表示使用字面值格式 (b"..."),因為它通常都要比像 bytes([46, 46, 46]) 這樣的格式更好用。 你總是可以使用 list(b) 將 bytes 對象轉換為一個由整數構成的列表。
注解
針對 Python 2.x 用戶的說明:在 Python 2.x 系列中,允許 8 位字符串( 2.x 所提供的最接近內置二進制數據類型的對象)與 Unicode 字符串進行各種隱式轉換。 這是為了實現向下兼容的變通做法,以適應 Python 最初只支持 8 位文本而 Unicode 文本是后來才被加入這一事實。 在 Python 3.x 中,這些隱式轉換已被取消 —— 8 位二進制數據與 Unicode 文本間的轉換必須顯式地進行,bytes 與字符串對象的比較結果將總是不相等。
bytearray 對象bytearray 對象是 bytes 對象的可變對應物。
class bytearray([source[, encoding[, errors]]])bytearray 對象沒有專屬的字面值語法,它們總是通過調用構造器來創建:
創建一個空實例: bytearray()
創建一個指定長度的以零值填充的實例: bytearray(10)
通過由整數組成的可迭代對象: bytearray(range(20))
通過緩沖區協議復制現有的二進制數據: bytearray(b"Hi!")
由于 bytearray 對象是可變的,該對象除了 bytes 和 bytearray 操作 中所描述的 bytes 和 bytearray 共有操作之外,還支持 可變 序列操作。
另請參見 bytearray 內置類型。
由于兩個十六進制數碼精確對應一個字節,因此十六進制數是描述二進制數據的常用格式。 相應地,bytearray 類型具有從此種格式讀取數據的附加類方法:
classmethod fromhex(string)bytearray 類方法返回一個解碼給定字符串的 bytearray 對象。 字符串必須由表示每個字節的兩個十六進制數碼構成,其中的 ASCII 空白符會被忽略。
>>> bytearray.fromhex("2Ef0 F1f2 ") bytearray(b".xf0xf1xf2")
在 3.7 版更改: bytearray.fromhex() 現在會忽略所有 ASCII 空白符而不只是空格符。 存在一個反向轉換函數,可以將 bytearray 對象轉換為對應的十六進制表示。hex()
返回一個字符串對象,該對象包含實例中每個字節的兩個十六進制數字。
>>> bytearray(b"xf0xf1xf2").hex() "f0f1f2"
3.5 新版功能.
由于 bytearray 對象是由整數構成的序列(類似于列表),因此對于一個 bytearray 對象 b,b[0] 將為一個整數,而 b[0:1] 將為一個長度為 1 的 bytearray 對象。 (這與文本字符串不同,索引和切片所產生的將都是一個長度為 1 的字符串)。
bytearray 對象的表示使用 bytes 對象字面值格式 (bytearray(b"...")),因為它通常都要比 bytearray([46, 46, 46]) 這樣的格式更好用。 你總是可以使用 list(b) 將 bytearray 對象轉換為一個由整數構成的列表。
bytes 和 bytearray 操作bytes 和 bytearray 對象都支持 通用 序列操作。 它們不僅能與相同類型的操作數,也能與任何 bytes-like object 進行互操作。 由于這樣的靈活性,它們可以在操作中自由地混合而不會導致錯誤。 但是,操作結果的返回值類型可能取決于操作數的順序。
注解
bytes 和 bytearray 對象的方法不接受字符串作為其參數,就像字符串的方法不接受 bytes 對象作為其參數一樣。 例如,你必須使用以下寫法:
a = "abc" b = a.replace("a", "f")
和:
a = b"abc" b = a.replace(b"a", b"f")
某些 bytes 和 bytearray 操作假定使用兼容 ASCII 的二進制格式,因此在處理任意二進數數據時應當避免使用。 這些限制會在下文中說明。
注解
使用這些基于 ASCII 的操作來處理未以基于 ASCII 的格式存儲的二進制數據可能會導致數據損壞。
bytes 和 bytearray 對象的下列方法可以用于任意二進制數據。
bytes.count(sub[, start[, end]])bytearray.count(sub[, start[, end]])
返回子序列 sub 在 [start, end] 范圍內非重疊出現的次數。 可選參數 start 與 end 會被解讀為切片表示法。 要搜索的子序列可以是任意 bytes-like object 或是 0 至 255 范圍內的整數。 在 3.3 版更改: 也接受 0 至 255 范圍內的整數作為子序列。bytes.decode(encoding="utf-8", errors="strict") bytearray.decode(encoding="utf-8", errors="strict")
返回從給定 bytes 解碼出來的字符串。 默認編碼為 "utf-8"。 可以給出 errors 來設置不同的錯誤處理方案。 errors 的默認值為 "strict",表示編碼錯誤會引發 UnicodeError。 其他可用的值為 "ignore", "replace" 以及任何其他通過 codecs.register_error() 注冊的名稱,請參閱 Error Handlers 小節。 要查看可用的編碼列表,請參閱 標準編碼 小節。 注解 將 encoding 參數傳給 str 允許直接解碼任何 bytes-like object,無須創建臨時的 bytes 或 bytearray 對象。 在 3.1 版更改: 加入了對關鍵字參數的支持。bytes.endswith(suffix[, start[, end]])
bytearray.endswith(suffix[, start[, end]])
如果二進制數據以指定的 suffix 結束則返回 True,否則返回 False。 suffix 也可以為由多個供查找的后綴構成的元組。 如果有可選項 start,將從所指定位置開始檢查。 如果有可選項 end,將在所指定位置停止比較。 要搜索的后綴可以是任意 bytes-like object。bytes.find(sub[, start[, end]]) bytearray.find(sub[, start[, end]])
返回子序列 sub 在數據中被找到的最小索引,sub 包含于切片 s[start:end] 之內。 可選參數 start 與 end 會被解讀為切片表示法。 如果 sub 未被找到則返回 -1。 要搜索的子序列可以是任意 bytes-like object 或是 0 至 255 范圍內的整數。 注解 find() 方法應該只在你需要知道 sub 所在位置時使用。 要檢查 sub 是否為子串,請使用 in 操作符:
>>> b"Py" in b"Python" True
在 3.3 版更改: 也接受 0 至 255 范圍內的整數作為子序列。bytes.index(sub[, start[, end]]) bytearray.index(sub[, start[, end]])
類似于 find(),但在找不到子序列時會引發 ValueError。 要搜索的子序列可以是任意 bytes-like object 或是 0 至 255 范圍內的整數。 在 3.3 版更改: 也接受 0 至 255 范圍內的整數作為子序列。bytes.join(iterable) bytearray.join(iterable)
返回一個由 iterable 中的二進制數據序列拼接而成的 bytes 或 bytearray 對象。 如果 iterable 中存在任何非 字節類對象 包括存在 str 對象值則會引發 TypeError。 提供該方法的 bytes 或 bytearray 對象的內容將作為元素之間的分隔。static bytes.maketrans(from, to) static bytearray.maketrans(from, to)
此靜態方法返回一個可用于 bytes.translate() 的轉換對照表,它將把 from 中的每個字符映射為 to 中相同位置上的字符;from 與 to 必須都是 字節類對象 并且具有相同的長度。 3.1 新版功能.bytes.partition(sep) bytearray.partition(sep)
在 sep 首次出現的位置拆分序列,返回一個 3 元組,其中包含分隔符之前的部分、分隔符本身或其 bytearray 副本,以及分隔符之后的部分。 如果分隔符未找到,則返回的 3 元組中包含原序列以及兩個空的 bytes 或 bytearray 對象。 要搜索的分隔符可以是任意 bytes-like object。bytes.replace(old, new[, count]) bytearray.replace(old, new[, count])
返回序列的副本,其中出現的所有子序列 old 都將被替換為 new。 如果給出了可選參數 count,則只替換前 count 次出現。 要搜索的子序列及其替換序列可以是任意 bytes-like object。 注解 此方法的 bytearray 版本 并非 原地操作 —— 它總是產生一個新對象,即便沒有做任何改變。bytes.rfind(sub[, start[, end]]) bytearray.rfind(sub[, start[, end]])
返回子序列 sub 在序列內被找到的最大(最右)索引,這樣 sub 將包含在 s[start:end] 當中。 可選參數 start 與 end 會被解讀為切片表示法。 如果未找到則返回 -1。 要搜索的子序列可以是任意 bytes-like object 或是 0 至 255 范圍內的整數。 在 3.3 版更改: 也接受 0 至 255 范圍內的整數作為子序列。bytes.rindex(sub[, start[, end]]) bytearray.rindex(sub[, start[, end]])
類似于 rfind(),但在子序列 sub 未找到時會引發 ValueError。 要搜索的子序列可以是任意 bytes-like object 或是 0 至 255 范圍內的整數。 在 3.3 版更改: 也接受 0 至 255 范圍內的整數作為子序列。bytes.rpartition(sep) bytearray.rpartition(sep)
在 sep 最后一次出現的位置拆分序列,返回一個 3 元組,其中包含分隔符之前的部分,分隔符本身或其 bytearray 副本,以及分隔符之后的部分。 如果分隔符未找到,則返回的 3 元組中包含兩個空的 bytes 或 bytearray 對象以及原序列的副本。 要搜索的分隔符可以是任意 bytes-like object。bytes.startswith(prefix[, start[, end]]) bytearray.startswith(prefix[, start[, end]])
如果二進制數據以指定的 prefix 開頭則返回 True,否則返回 False。 prefix 也可以為由多個供查找的前綴構成的元組。 如果有可選項 start,將從所指定位置開始檢查。 如果有可選項 end,將在所指定位置停止比較。 要搜索的前綴可以是任意 bytes-like object。bytes.translate(table, delete=b"") bytearray.translate(table, delete=b"")
返回原 bytes 或 bytearray 對象的副本,移除其中所有在可選參數 delete 中出現的 bytes,其余 bytes 將通過給定的轉換表進行映射,該轉換表必須是長度為 256 的 bytes 對象。 你可以使用 bytes.maketrans() 方法來創建轉換表。 對于僅需移除字符的轉換,請將 table 參數設為 None:
>>> b"read this short text".translate(None, b"aeiou") b"rd ths shrt txt"
在 3.6 版更改: 現在支持將 delete 作為關鍵字參數。
以下 bytes 和 bytearray 對象的方法的默認行為會假定使用兼容 ASCII 的二進制格式,但通過傳入適當的參數仍然可用于任意二進制數據。 請注意本小節中所有的 bytearray 方法都 不是 原地執行操作,而是會產生新的對象。
bytes.center(width[, fillbyte]) bytearray.center(width[, fillbyte])返回原對象的副本,在長度為 width 的序列內居中,使用指定的 fillbyte 填充兩邊的空位(默認使用 ASCII 空格符)。 對于 bytes 對象,如果 width 小于等于 len(s) 則返回原序列的副本。 注解 此方法的 bytearray 版本 并非 原地操作 —— 它總是產生一個新對象,即便沒有做任何改變。bytes.ljust(width[, fillbyte]) bytearray.ljust(width[, fillbyte])
反回原對象的副本,在長度為 width 的序列中靠左對齊。 使用指定的 fillbyte 填充空位(默認使用 ASCII 空格符)。 對于 bytes 對象,如果 width 小于等于 len(s) 則返回原序列的副本。 注解 此方法的 bytearray 版本 并非 原地操作 —— 它總是產生一個新對象,即便沒有做任何改變。bytes.lstrip([chars]) bytearray.lstrip([chars])
返回原序列的副本,移除指定的前導字節。 chars 參數為指定要移除字節值集合的二進制序列 —— 這個名稱表明此方法通常是用于 ASCII 字符。 如果省略或為 None,則 chars 參數默認移除 ASCII 空白符。 chars 參數并非指定單個前綴;而是會移除參數值的所有組合:
>>> b" spacious ".lstrip() b"spacious " >>> b"www.example.com".lstrip(b"cmowz.") b"example.com"
要移除的字節值二進制序列可以是任意 bytes-like object。 注解 此方法的 bytearray 版本 并非 原地操作 —— 它總是產生一個新對象,即便沒有做任何改變。bytes.rjust(width[, fillbyte]) bytearray.rjust(width[, fillbyte])
返回原對象的副本,在長度為 width 的序列中靠右對齊。 使用指定的 fillbyte 填充空位(默認使用 ASCII 空格符)。 對于 bytes 對象,如果 width 小于等于 len(s) 則返回原序列的副本。 注解 此方法的 bytearray 版本 并非 原地操作 —— 它總是產生一個新對象,即便沒有做任何改變。bytes.rsplit(sep=None, maxsplit=-1) bytearray.rsplit(sep=None, maxsplit=-1)
將二進制序列拆分為相同類型的子序列,使用 sep 作為分隔符。 如果給出了 maxsplit,則最多進行 maxsplit 次拆分,從 最右邊 開始。 如果 sep 未指定或為 None,任何只包含 ASCII 空白符的子序列都會被作為分隔符。 除了從右邊開始拆分,rsplit() 的其他行為都類似于下文所述的 split()。bytes.rstrip([chars]) bytearray.rstrip([chars])
返回原序列的副本,移除指定的末尾字節。 chars 參數為指定要移除字節值集合的二進制序列 —— 這個名稱表明此方法通常是用于 ASCII 字符。 如果省略或為 None,則 chars 參數默認移除 ASCII 空白符。 chars 參數并非指定單個后綴;而是會移除參數值的所有組合:
>>> b" spacious ".rstrip() b" spacious" >>> b"mississippi".rstrip(b"ipz") b"mississ"
要移除的字節值二進制序列可以是任意 bytes-like object。 注解 此方法的 bytearray 版本 并非 原地操作 —— 它總是產生一個新對象,即便沒有做任何改變。bytes.split(sep=None, maxsplit=-1) bytearray.split(sep=None, maxsplit=-1)
將二進制序列拆分為相同類型的子序列,使用 sep 作為分隔符。 如果給出了 maxsplit 且非負值,則最多進行 maxsplit 次拆分(因此,列表最多會有 maxsplit+1 個元素)。 如果 maxsplit 未指定或為 -1,則不限制拆分次數(進行所有可能的拆分)。 如果給出了 sep,則連續的分隔符不會被組合在一起而是被視為分隔空子序列 (例如 b"1,,2".split(b",") 將返回 [b"1", b"", b"2"])。 sep 參數可能為一個多字節序列 (例如 b"1<>2<>3".split(b"<>") 將返回 [b"1", b"2", b"3"])。 使用指定的分隔符拆分空序列將返回 [b""] 或 [bytearray(b"")],具體取決于被拆分對象的類型。 sep 參數可以是任意 bytes-like object。 例如:
>>> b"1,2,3".split(b",") [b"1", b"2", b"3"] >>> b"1,2,3".split(b",", maxsplit=1) [b"1", b"2,3"] >>> b"1,2,,3,".split(b",") [b"1", b"2", b"", b"3", b""]
如果 sep 未指定或為 None,則會應用另一種拆分算法:連續的 ASCII 空白符會被視為單個分隔符,其結果將不包含序列開頭或末尾的空白符。 因此,在不指定分隔符的情況下對空序列或僅包含 ASCII 空白符的序列進行拆分將返回 []。 例如:
>>> b"1 2 3".split() [b"1", b"2", b"3"] >>> b"1 2 3".split(maxsplit=1) [b"1", b"2 3"] >>> b" 1 2 3 ".split() [b"1", b"2", b"3"]bytes.strip([chars]) bytearray.strip([chars])
返回原序列的副本,移除指定的開頭和末尾字節。 chars 參數為指定要移除字節值集合的二進制序列 —— 這個名稱表明此方法通常是用于 ASCII 字符。 如果省略或為 None,則 chars 參數默認移除 ASCII 空白符。 chars 參數并非指定單個前綴或后綴;而是會移除參數值的所有組合:
>>> b" spacious ".strip() b"spacious" >>> b"www.example.com".strip(b"cmowz.") b"example"
要移除的字節值二進制序列可以是任意 bytes-like object。 注解 此方法的 bytearray 版本 并非 原地操作 —— 它總是產生一個新對象,即便沒有做任何改變。
以下 bytes 和 bytearray 對象的方法會假定使用兼容 ASCII 的二進制格式,不應當被應用于任意二進制數據。 請注意本小節中所有的 bytearray 方法都 不是 原地執行操作,而是會產生新的對象。
bytes.capitalize() bytearray.capitalize()返回原序列的副本,其中每個字節將都將被解讀為一個 ASCII 字符,并且第一個字節的字符大寫而其余的小寫。 非 ASCII 字節值將保持原樣不變。 注解 此方法的 bytearray 版本 并非 原地操作 —— 它總是產生一個新對象,即便沒有做任何改變。bytes.expandtabs(tabsize=8) bytearray.expandtabs(tabsize=8)
返回序列的副本,其中所有的 ASCII 制表符會由一個或多個 ASCII 空格替換,具體取決于當前列位置和給定的制表符寬度。 每 tabsize 個字節設為一個制表位(默認值 8 時設定的制表位在列 0, 8, 16 依次類推)。 要展開序列,當前列位置將被設為零并逐一檢查序列中的每個字節。 如果字節為 ASCII 制表符 (b" "),則并在結果中插入一個或多個空格符,直到當前列等于下一個制表位。 (制表符本身不會被復制。) 如果當前字節為 ASCII 換行符 (b" ") 或回車符 (b" "),它會被復制并將當前列重設為零。 任何其他字節會被不加修改地復制并將當前列加一,不論該字節值在被打印時會如何顯示:
>>> b"01 012 0123 01234".expandtabs() b"01 012 0123 01234" >>> b"01 012 0123 01234".expandtabs(4) b"01 012 0123 01234"
注解 此方法的 bytearray 版本 并非 原地操作 —— 它總是產生一個新對象,即便沒有做任何改變。bytes.isalnum() bytearray.isalnum()
如果序列中所有字節都是字母類 ASCII 字符或 ASCII 十進制數碼并且序列非空則返回真值,否則返回假值。 字母類 ASCII 字符就是字節值包含在序列 b"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 中的字符。 ASCII 十進制數碼就是字節值包含在序列 b"0123456789" 中的字符。 例如:
>>> b"ABCabc1".isalnum() True >>> b"ABC abc1".isalnum() Falsebytes.isalpha() bytearray.isalpha()
如果序列中所有字節都是字母類 ASCII 字符并且序列非空則返回真值,否則返回假值。 字母類 ASCII 字符就是字節值包含在序列 b"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 中的字符。 例如:
>>> b"ABCabc".isalpha() True >>> b"ABCabc1".isalpha() Falsebytes.isascii() bytearray.isascii()
如果序列為空或序列中所有字節都是 ASCII 字節則返回真值,否則返回假值。 ASCII 字節的取值范圍是 0-0x7F。 3.7 新版功能.bytes.isdigit() bytearray.isdigit()
如果序列中所有字節都是 ASCII 十進制數碼并且序列非空則返回真值,否則返回假值。 ASCII 十進制數碼就是字節值包含在序列 b"0123456789" 中的字符。 例如:
>>> b"1234".isdigit() True >>> b"1.23".isdigit() Falsebytes.islower() bytearray.islower()
如果序列中至少有一個小寫 ASCII 字符并且沒有大寫 ASCII 字符則返回真值,否則返回假值。 例如:
>>> b"hello world".islower() True >>> b"Hello world".islower() False
小寫 ASCII 字符就是字節值包含在序列 b"abcdefghijklmnopqrstuvwxyz" 中的字符。 大寫 ASCII 字符就是字節值包含在序列 b"ABCDEFGHIJKLMNOPQRSTUVWXYZ" 中的字符。bytes.isspace() bytearray.isspace()
如果序列中所有字節都是 ASCII 空白符并且序列非空則返回真值,否則返回假值。 ASCII 空白符就是字節值包含在序列 b" x0bf" (空格, 制表, 換行, 回車, 垂直制表, 換頁) 中的字符。bytes.istitle() bytearray.istitle()
如果序列為 ASCII 標題形式并且序列非空則返回真值,否則返回假值。 請參閱 bytes.title() 了解有關“標題形式”的詳細定義。 例如:
>>> b"Hello World".istitle() True >>> b"Hello world".istitle() Falsebytes.isupper() bytearray.isupper()
如果序列中至少有一個大寫字母 ASCII 字符并且沒有小寫 ASCII 字符則返回真值,否則返回假值。 例如:
>>> b"HELLO WORLD".isupper() True >>> b"Hello world".isupper() False
小寫 ASCII 字符就是字節值包含在序列 b"abcdefghijklmnopqrstuvwxyz" 中的字符。 大寫 ASCII 字符就是字節值包含在序列 b"ABCDEFGHIJKLMNOPQRSTUVWXYZ" 中的字符。bytes.lower() bytearray.lower()
返回原序列的副本,其所有大寫 ASCII 字符均轉換為對應的小寫形式。 例如:
>>> b"Hello World".lower() b"hello world"
小寫 ASCII 字符就是字節值包含在序列 b"abcdefghijklmnopqrstuvwxyz" 中的字符。 大寫 ASCII 字符就是字節值包含在序列 b"ABCDEFGHIJKLMNOPQRSTUVWXYZ" 中的字符。 注解 此方法的 bytearray 版本 并非 原地操作 —— 它總是產生一個新對象,即便沒有做任何改變。bytes.splitlines(keepends=False) bytearray.splitlines(keepends=False)
返回由原二進制序列中各行組成的列表,在 ASCII 行邊界符的位置拆分。 此方法使用 universal newlines 方式來分行。 結果列表中不包含換行符,除非給出了 keepends 且為真值。 例如:
>>> b"ab c de fg kl ".splitlines() [b"ab c", b"", b"de fg", b"kl"] >>> b"ab c de fg kl ".splitlines(keepends=True) [b"ab c ", b" ", b"de fg ", b"kl "]
不同于 split(),當給出了分隔符 sep 時,對于空字符串此方法將返回一個空列表,而末尾的換行不會令結果中增加額外的行:
>>> b"".split(b" "), b"Two lines ".split(b" ") ([b""], [b"Two lines", b""]) >>> b"".splitlines(), b"One line ".splitlines() ([], [b"One line"])bytes.swapcase() bytearray.swapcase()
返回原序列的副本,其所有小寫 ASCII 字符均轉換為對應的大寫形式,反之亦反。 例如:
>>> b"Hello World".swapcase() b"hELLO wORLD"
小寫 ASCII 字符就是字節值包含在序列 b"abcdefghijklmnopqrstuvwxyz" 中的字符。 大寫 ASCII 字符就是字節值包含在序列 b"ABCDEFGHIJKLMNOPQRSTUVWXYZ" 中的字符。 不同于 str.swapcase(),在些二進制版本下 bin.swapcase().swapcase() == bin 總是成立。 大小寫轉換在 ASCII 中是對稱的,即使其對于任意 Unicode 碼位來說并不總是成立。 注解 此方法的 bytearray 版本 并非 原地操作 —— 它總是產生一個新對象,即便沒有做任何改變。bytes.title() bytearray.title()
返回原二進制序列的標題版本,其中每個單詞以一個大寫 ASCII 字符為開頭,其余字母為小寫。 不區別大小寫的字節值將保持原樣不變。 例如:
>>> b"Hello world".title() b"Hello World"
小寫 ASCII 字符就是字節值包含在序列 b"abcdefghijklmnopqrstuvwxyz" 中的字符。 大寫 ASCII 字符就是字節值包含在序列 b"ABCDEFGHIJKLMNOPQRSTUVWXYZ" 中的字符。 所有其他字節值都不區分大小寫。 該算法使用一種簡單的與語言無關的定義,將連續的字母組合視為單詞。 該定義在多數情況下都很有效,但它也意味著代表縮寫形式與所有格的撇號也會成為單詞邊界,這可能導致不希望的結果:
>>> b"they"re bill"s friends from the UK".title() b"They"Re Bill"S Friends From The Uk"
可以使用正則表達式來構建針對撇號的特別處理:
>>> import re >>> def titlecase(s): ... return re.sub(rb"[A-Za-z]+("[A-Za-z]+)?", ... lambda mo: mo.group(0)[0:1].upper() + ... mo.group(0)[1:].lower(), ... s) ... >>> titlecase(b"they"re bill"s friends.") b"They"re Bill"s Friends."
注解 此方法的 bytearray 版本 并非 原地操作 —— 它總是產生一個新對象,即便沒有做任何改變。bytes.upper() bytearray.upper()
返回原序列的副本,其所有小寫 ASCII 字符均轉換為對應的大寫形式。 例如:
>>> b"Hello World".upper() b"HELLO WORLD"
小寫 ASCII 字符就是字節值包含在序列 b"abcdefghijklmnopqrstuvwxyz" 中的字符。 大寫 ASCII 字符就是字節值包含在序列 b"ABCDEFGHIJKLMNOPQRSTUVWXYZ" 中的字符。 注解 此方法的 bytearray 版本 并非 原地操作 —— 它總是產生一個新對象,即便沒有做任何改變。bytes.zfill(width) bytearray.zfill(width)
返回原序列的副本,在左邊填充 b"0" 數碼使序列長度為 width。 正負值前綴 (b"+"/ b"-") 的處理方式是在正負符號 之后 填充而非在之前。 對于 bytes 對象,如果 width 小于等于 len(seq) 則返回原序列。 例如:
>>> b"42".zfill(5) b"00042" >>> b"-42".zfill(5) b"-0042"
注解 此方法的 bytearray 版本 并非 原地操作 —— 它總是產生一個新對象,即便沒有做任何改變。printf 風格的字節串格式化
注解
此處介紹的格式化操作具有多種怪異特性,可能導致許多常見錯誤(例如無法正確顯示元組和字典)。 如果要打印的值可能為元組或字典,請將其放入一個元組中。
字節串對象 (bytes/bytearray) 具有一種特殊的內置操作:使用 % (取模) 運算符。 這也被稱為字節串的 格式化 或 插值 運算符。 對于 format % values (其中 format 為一個字節串對象),在 format 中的 % 轉換標記符將被替換為零個或多個 values 條目。 其效果類似于在 C 語言中使用 sprintf()。
如果 format 要求一個多帶帶參數,則 values 可以為一個非元組對象。 5 否則的話,values 必須或是是一個包含項數與格式字節串對象中指定的轉換符項數相同的元組,或者是一個多帶帶的映射對象(例如元組)。
轉換標記符包含兩個或更多字符并具有以下組成,且必須遵循此處規定的順序:
"%" 字符,用于標記轉換符的起始。
映射鍵(可選),由加圓括號的字符序列組成 (例如 (somename))。
轉換旗標(可選),用于影響某些轉換類型的結果。
最小字段寬度(可選)。 如果指定為 "*" (星號),則實際寬度會從 values 元組的下一元素中讀取,要轉換的對象則為最小字段寬度和可選的精度之后的元素。
精度(可選),以在 "." (點號) 之后加精度值的形式給出。 如果指定為 "*" (星號),則實際精度會從 values 元組的下一元素中讀取,要轉換的對象則為精度之后的元素。
長度修飾符(可選)。
轉換類型。
當右邊的參數為一個字典(或其他映射類型)時,字節串對象中的格式 必須 包含加圓括號的映射鍵,對應 "%" 字符之后字典中的每一項。 映射鍵將從映射中選取要格式化的值。 例如:
>>> print(b"%(language)s has %(number)03d quote types." % ... {b"language": b"Python", b"number": 2}) b"Python has 002 quote types."
在此情況下格式中不能出現 * 標記符(因其需要一個序列類的參數列表)。
轉換旗標為:
可以給出長度修飾符 (h, l 或 L),但會被忽略,因為對 Python 來說沒有必要 -- 所以 %ld 等價于 %d。
轉換類型為:
注釋:
此替代形式會在第一個數碼之前插入標示八進制數的前綴 ("0o")。
此替代形式會在第一個數碼之前插入 "0x" 或 "0X" 前綴(取決于是使用 "x" 還是 "X" 格式)。
此替代形式總是會在結果中包含一個小數點,即使其后并沒有數碼。
小數點后的數碼位數由精度決定,默認為 6。
此替代形式總是會在結果中包含一個小數點,末尾各位的零不會如其他情況下那樣被移除。
小數點前后的有效數碼位數由精度決定,默認為 6。
如果精度為 N,輸出將截短為 N 個字符。
b"%s" 已棄用,但在 3.x 系列中將不會被移除。
b"%r" 已棄用,但在 3.x 系列中將不會被移除。
參見 PEP 237。
注解
此方法的 bytearray 版本 并非 原地操作 —— 它總是產生一個新對象,即便沒有做任何改變。
參見
PEP 461 - 為 bytes 和 bytearray 添加 % 格式化
3.5 新版功能.
上一篇文章:Python標準庫---12、內置類型:文本序列類型(str)
下一篇文章:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44002.html
摘要:對于更高的維度,其長度等于表示的嵌套列表的長度。這是數組在連續表示時將會占用的空間總字節數。該值僅作為參考信息。新版功能一個表明內存是否為的布爾值。新版功能上一篇文章標準庫內置類型二進制序列類型下一篇文章標準庫內置類型集合類型映射類型 上一篇文章:Python標準庫---13、內置類型:二進制序列類型 ( bytes, bytearray)下一篇文章:Python標準庫---15、內置...
摘要:上一篇文章標準庫內置類型迭代器類型序列類型下一篇文章標準庫內置類型二進制序列類型文本序列類型在中處理文本數據是使用對象,也稱為字符串。正式的定義為十進制數字符就是一般分類中的字符。 上一篇文章:Python標準庫---11、內置類型:迭代器類型、序列類型(list-typle-range)下一篇文章:Python標準庫---13、內置類型:二進制序列類型 ( bytes, bytear...
摘要:判斷奇數是迭代器會根據提供的函數對指定序列做映射語法可以對可迭代對象中的每一個元素進行映射。 python內置庫詳解 1、引言2、內置庫詳解2.1 數據相關2.1...
摘要:字符編碼表,碼位碼元將編碼字符集中的碼位轉換成有限比特長度的整型值的序列。字符編碼方案,碼元序列化也稱為常說的序列化。每個字節里的二進制數就是字節序列。另一個情況則是壓縮字節序列的值,如或進程長度編碼等無損壓縮技術。 《流暢的Python》筆記。本篇主要講述不同編碼之間的轉換問題,比較繁雜,如果平時處理文本不多,或者語言比較單一,沒有多語言文本處理的需求,則可以略過此篇。 1. 前言 ...
摘要:內置函數返回一個數的絕對值。使用標準的真值測試過程來轉換。因此,構造函數的實參和相同。實參的合法范圍是到進制表示是。數字類型描述了復數類型。上一篇文章標準庫簡介下一篇文章標準庫內置函數 上一篇文章:Python標準庫----0、簡介下一篇文章:Python標準庫---1、內置函數(D-E-F) Python 解釋器內置了很多函數和類型,您可以在任何時候使用它們。以下按字母表順序列出它...
閱讀 3350·2021-11-04 16:10
閱讀 3846·2021-09-29 09:43
閱讀 2692·2021-09-24 10:24
閱讀 3338·2021-09-01 10:46
閱讀 2503·2019-08-30 15:54
閱讀 585·2019-08-30 13:19
閱讀 3232·2019-08-29 17:19
閱讀 1049·2019-08-29 16:40