成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python標(biāo)準(zhǔn)庫(kù)---13、內(nèi)置類型:二進(jìn)制序列類型 ( bytes, bytearray)

gekylin / 2030人閱讀

摘要:上一篇文章標(biāo)準(zhǔn)庫(kù)內(nèi)置類型文本序列類型下一篇文章二進(jìn)制序列類型操作二進(jìn)制數(shù)據(jù)的核心內(nèi)置類型是和。另請(qǐng)參見(jiàn)內(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)制數(shù)據(jù)的核心內(nèi)置類型是 bytes 和 bytearray。 它們由 memoryview 提供支持,該對(duì)象使用 緩沖區(qū)協(xié)議 來(lái)訪問(wèn)其他二進(jìn)制對(duì)象所在內(nèi)存,不需要?jiǎng)?chuàng)建對(duì)象的副本。

array 模塊支持高效地存儲(chǔ)基本數(shù)據(jù)類型,例如 32 位整數(shù)和 IEEE754 雙精度浮點(diǎn)值。

bytes 對(duì)象

bytes 對(duì)象是由單個(gè)字節(jié)構(gòu)成的不可變序列。 由于許多主要二進(jìn)制協(xié)議都基于 ASCII 文本編碼,因此 bytes 對(duì)象提供了一些僅在處理 ASCII 兼容數(shù)據(jù)時(shí)可用,并且在許多特性上與字符串對(duì)象緊密相關(guān)的方法。

class bytes([source[, encoding[, errors]]])
首先,表示 bytes 字面值的語(yǔ)法與字符串字面值的大致相同,只是添加了一個(gè) b 前綴:

    單引號(hào): b"同樣允許嵌入 "雙" 引號(hào)"。

    雙引號(hào): b"同樣允許嵌入 "單" 引號(hào)"。

    三重引號(hào): b"""三重單引號(hào)""", b"""三重雙引號(hào)"""

bytes 字面值中只允許 ASCII 字符(無(wú)論源代碼聲明的編碼為何)。 任何超出 127 的二進(jìn)制值必須使用相應(yīng)的轉(zhuǎn)義序列形式加入 bytes 字面值。

像字符串字面值一樣,bytes 字面值也可以使用 r 前綴來(lái)禁用轉(zhuǎn)義序列處理。 請(qǐng)參閱 字符串和字節(jié)串字面值 了解有關(guān)各種 bytes 字面值形式的詳情,包括所支持的轉(zhuǎn)義序列。

雖然 bytes 字面值和表示法是基于 ASCII 文本的,但 bytes 對(duì)象的行為實(shí)際上更像是不可變的整數(shù)序列,序列中的每個(gè)值的大小被限制為 0 <= x < 256 (如果違反此限制將引發(fā) ValueError)。 這種限制是有意設(shè)計(jì)用以強(qiáng)調(diào)以下事實(shí),雖然許多二進(jìn)制格式都包含基于 ASCII 的元素,可以通過(guò)某些面向文本的算法進(jìn)行有用的操作,但情況對(duì)于任意二進(jìn)制數(shù)據(jù)來(lái)說(shuō)通常卻并非如此(盲目地將文本處理算法應(yīng)用于不兼容 ASCII 的二進(jìn)制數(shù)據(jù)格式往往將導(dǎo)致數(shù)據(jù)損壞)。

除了字面值形式,bytes 對(duì)象還可以通過(guò)其他幾種方式來(lái)創(chuàng)建:

指定長(zhǎng)度的以零值填充的 bytes 對(duì)象: bytes(10)

通過(guò)由整數(shù)組成的可迭代對(duì)象: bytes(range(20))

通過(guò)緩沖區(qū)協(xié)議復(fù)制現(xiàn)有的二進(jìn)制數(shù)據(jù): bytes(obj)

另請(qǐng)參閱 bytes 內(nèi)置類型。

由于兩個(gè)十六進(jìn)制數(shù)碼精確對(duì)應(yīng)一個(gè)字節(jié),因此十六進(jìn)制數(shù)是描述二進(jìn)制數(shù)據(jù)的常用格式。 相應(yīng)地,bytes 類型具有從此種格式讀取數(shù)據(jù)的附加類方法:

classmethod fromhex(string)
    此 bytes 類方法返回一個(gè)解碼給定字符串的 bytes 對(duì)象。 字符串必須由表示每個(gè)字節(jié)的兩個(gè)十六進(jìn)制數(shù)碼構(gòu)成,其中的 ASCII 空白符會(huì)被忽略。

    >>> bytes.fromhex("2Ef0 F1f2  ")
    b".xf0xf1xf2"

    在 3.7 版更改: bytes.fromhex() 現(xiàn)在會(huì)忽略所有 ASCII 空白符而不只是空格符。

存在一個(gè)反向轉(zhuǎn)換函數(shù),可以將 bytes 對(duì)象轉(zhuǎn)換為對(duì)應(yīng)的十六進(jìn)制表示。
hex()
    返回一個(gè)字符串對(duì)象,該對(duì)象包含實(shí)例中每個(gè)字節(jié)的兩個(gè)十六進(jìn)制數(shù)字。

    >>> b"xf0xf1xf2".hex()
    "f0f1f2"

    3.5 新版功能.

由于 bytes 對(duì)象是由整數(shù)構(gòu)成的序列(類似于元組),因此對(duì)于一個(gè) bytes 對(duì)象 b,b[0] 將為一個(gè)整數(shù),而 b[0:1] 將為一個(gè)長(zhǎng)度為 1 的 bytes 對(duì)象。 (這與文本字符串不同,索引和切片所產(chǎn)生的將都是一個(gè)長(zhǎng)度為 1 的字符串)。

bytes 對(duì)象的表示使用字面值格式 (b"..."),因?yàn)樗ǔ6家认?bytes([46, 46, 46]) 這樣的格式更好用。 你總是可以使用 list(b) 將 bytes 對(duì)象轉(zhuǎn)換為一個(gè)由整數(shù)構(gòu)成的列表。

注解

針對(duì) Python 2.x 用戶的說(shuō)明:在 Python 2.x 系列中,允許 8 位字符串( 2.x 所提供的最接近內(nèi)置二進(jìn)制數(shù)據(jù)類型的對(duì)象)與 Unicode 字符串進(jìn)行各種隱式轉(zhuǎn)換。 這是為了實(shí)現(xiàn)向下兼容的變通做法,以適應(yīng) Python 最初只支持 8 位文本而 Unicode 文本是后來(lái)才被加入這一事實(shí)。 在 Python 3.x 中,這些隱式轉(zhuǎn)換已被取消 —— 8 位二進(jìn)制數(shù)據(jù)與 Unicode 文本間的轉(zhuǎn)換必須顯式地進(jìn)行,bytes 與字符串對(duì)象的比較結(jié)果將總是不相等。

bytearray 對(duì)象

bytearray 對(duì)象是 bytes 對(duì)象的可變對(duì)應(yīng)物。

class bytearray([source[, encoding[, errors]]])
bytearray 對(duì)象沒(méi)有專屬的字面值語(yǔ)法,它們總是通過(guò)調(diào)用構(gòu)造器來(lái)創(chuàng)建:

創(chuàng)建一個(gè)空實(shí)例: bytearray()

創(chuàng)建一個(gè)指定長(zhǎng)度的以零值填充的實(shí)例: bytearray(10)

通過(guò)由整數(shù)組成的可迭代對(duì)象: bytearray(range(20))

通過(guò)緩沖區(qū)協(xié)議復(fù)制現(xiàn)有的二進(jìn)制數(shù)據(jù): bytearray(b"Hi!")

由于 bytearray 對(duì)象是可變的,該對(duì)象除了 bytes 和 bytearray 操作 中所描述的 bytes 和 bytearray 共有操作之外,還支持 可變 序列操作。

另請(qǐng)參見(jiàn) bytearray 內(nèi)置類型。

由于兩個(gè)十六進(jìn)制數(shù)碼精確對(duì)應(yīng)一個(gè)字節(jié),因此十六進(jìn)制數(shù)是描述二進(jìn)制數(shù)據(jù)的常用格式。 相應(yīng)地,bytearray 類型具有從此種格式讀取數(shù)據(jù)的附加類方法:

classmethod fromhex(string)
    bytearray 類方法返回一個(gè)解碼給定字符串的 bytearray 對(duì)象。 字符串必須由表示每個(gè)字節(jié)的兩個(gè)十六進(jìn)制數(shù)碼構(gòu)成,其中的 ASCII 空白符會(huì)被忽略。
        >>> bytearray.fromhex("2Ef0 F1f2  ")
        bytearray(b".xf0xf1xf2")
    在 3.7 版更改: bytearray.fromhex() 現(xiàn)在會(huì)忽略所有 ASCII 空白符而不只是空格符。

存在一個(gè)反向轉(zhuǎn)換函數(shù),可以將 bytearray 對(duì)象轉(zhuǎn)換為對(duì)應(yīng)的十六進(jìn)制表示。
hex()
    返回一個(gè)字符串對(duì)象,該對(duì)象包含實(shí)例中每個(gè)字節(jié)的兩個(gè)十六進(jìn)制數(shù)字。
        >>> bytearray(b"xf0xf1xf2").hex()
        "f0f1f2"
    3.5 新版功能.

由于 bytearray 對(duì)象是由整數(shù)構(gòu)成的序列(類似于列表),因此對(duì)于一個(gè) bytearray 對(duì)象 b,b[0] 將為一個(gè)整數(shù),而 b[0:1] 將為一個(gè)長(zhǎng)度為 1 的 bytearray 對(duì)象。 (這與文本字符串不同,索引和切片所產(chǎn)生的將都是一個(gè)長(zhǎng)度為 1 的字符串)。

bytearray 對(duì)象的表示使用 bytes 對(duì)象字面值格式 (bytearray(b"...")),因?yàn)樗ǔ6家?bytearray([46, 46, 46]) 這樣的格式更好用。 你總是可以使用 list(b) 將 bytearray 對(duì)象轉(zhuǎn)換為一個(gè)由整數(shù)構(gòu)成的列表。

bytes 和 bytearray 操作

bytes 和 bytearray 對(duì)象都支持 通用 序列操作。 它們不僅能與相同類型的操作數(shù),也能與任何 bytes-like object 進(jìn)行互操作。 由于這樣的靈活性,它們可以在操作中自由地混合而不會(huì)導(dǎo)致錯(cuò)誤。 但是,操作結(jié)果的返回值類型可能取決于操作數(shù)的順序。

注解

bytes 和 bytearray 對(duì)象的方法不接受字符串作為其參數(shù),就像字符串的方法不接受 bytes 對(duì)象作為其參數(shù)一樣。 例如,你必須使用以下寫(xiě)法:

a = "abc"
b = a.replace("a", "f")

和:

a = b"abc"
b = a.replace(b"a", b"f")

某些 bytes 和 bytearray 操作假定使用兼容 ASCII 的二進(jìn)制格式,因此在處理任意二進(jìn)數(shù)數(shù)據(jù)時(shí)應(yīng)當(dāng)避免使用。 這些限制會(huì)在下文中說(shuō)明。

注解

使用這些基于 ASCII 的操作來(lái)處理未以基于 ASCII 的格式存儲(chǔ)的二進(jìn)制數(shù)據(jù)可能會(huì)導(dǎo)致數(shù)據(jù)損壞。

bytes 和 bytearray 對(duì)象的下列方法可以用于任意二進(jìn)制數(shù)據(jù)。

bytes.count(sub[, start[, end]])

bytearray.count(sub[, start[, end]])

返回子序列 sub 在 [start, end] 范圍內(nèi)非重疊出現(xiàn)的次數(shù)。 可選參數(shù) start 與 end 會(huì)被解讀為切片表示法。

要搜索的子序列可以是任意 bytes-like object 或是 0 至 255 范圍內(nèi)的整數(shù)。

在 3.3 版更改: 也接受 0 至 255 范圍內(nèi)的整數(shù)作為子序列。
bytes.decode(encoding="utf-8", errors="strict") bytearray.decode(encoding="utf-8", errors="strict")
返回從給定 bytes 解碼出來(lái)的字符串。 默認(rèn)編碼為 "utf-8"。 可以給出 errors 來(lái)設(shè)置不同的錯(cuò)誤處理方案。 errors 的默認(rèn)值為 "strict",表示編碼錯(cuò)誤會(huì)引發(fā) UnicodeError。 其他可用的值為 "ignore", "replace" 以及任何其他通過(guò) codecs.register_error() 注冊(cè)的名稱,請(qǐng)參閱 Error Handlers 小節(jié)。 要查看可用的編碼列表,請(qǐng)參閱 標(biāo)準(zhǔn)編碼 小節(jié)。

注解

將 encoding 參數(shù)傳給 str 允許直接解碼任何 bytes-like object,無(wú)須創(chuàng)建臨時(shí)的 bytes 或 bytearray 對(duì)象。

在 3.1 版更改: 加入了對(duì)關(guān)鍵字參數(shù)的支持。
bytes.endswith(suffix[, start[, end]])

bytearray.endswith(suffix[, start[, end]])

如果二進(jìn)制數(shù)據(jù)以指定的 suffix 結(jié)束則返回 True,否則返回 False。 suffix 也可以為由多個(gè)供查找的后綴構(gòu)成的元組。 如果有可選項(xiàng) start,將從所指定位置開(kāi)始檢查。 如果有可選項(xiàng) end,將在所指定位置停止比較。

要搜索的后綴可以是任意 bytes-like object。
bytes.find(sub[, start[, end]]) bytearray.find(sub[, start[, end]])
返回子序列 sub 在數(shù)據(jù)中被找到的最小索引,sub 包含于切片 s[start:end] 之內(nèi)。 可選參數(shù) start 與 end 會(huì)被解讀為切片表示法。 如果 sub 未被找到則返回 -1。

要搜索的子序列可以是任意 bytes-like object 或是 0 至 255 范圍內(nèi)的整數(shù)。

注解

find() 方法應(yīng)該只在你需要知道 sub 所在位置時(shí)使用。 要檢查 sub 是否為子串,請(qǐng)使用 in 操作符:
    >>> b"Py" in b"Python"
    True
在 3.3 版更改: 也接受 0 至 255 范圍內(nèi)的整數(shù)作為子序列。
bytes.index(sub[, start[, end]]) bytearray.index(sub[, start[, end]])
類似于 find(),但在找不到子序列時(shí)會(huì)引發(fā) ValueError。

要搜索的子序列可以是任意 bytes-like object 或是 0 至 255 范圍內(nèi)的整數(shù)。

在 3.3 版更改: 也接受 0 至 255 范圍內(nèi)的整數(shù)作為子序列。
bytes.join(iterable) bytearray.join(iterable)
返回一個(gè)由 iterable 中的二進(jìn)制數(shù)據(jù)序列拼接而成的 bytes 或 bytearray 對(duì)象。 如果 iterable 中存在任何非 字節(jié)類對(duì)象 包括存在 str 對(duì)象值則會(huì)引發(fā) TypeError。 提供該方法的 bytes 或 bytearray 對(duì)象的內(nèi)容將作為元素之間的分隔。
static bytes.maketrans(from, to) static bytearray.maketrans(from, to)
此靜態(tài)方法返回一個(gè)可用于 bytes.translate() 的轉(zhuǎn)換對(duì)照表,它將把 from 中的每個(gè)字符映射為 to 中相同位置上的字符;from 與 to 必須都是 字節(jié)類對(duì)象 并且具有相同的長(zhǎng)度。

3.1 新版功能.
bytes.partition(sep) bytearray.partition(sep)
在 sep 首次出現(xiàn)的位置拆分序列,返回一個(gè) 3 元組,其中包含分隔符之前的部分、分隔符本身或其 bytearray 副本,以及分隔符之后的部分。 如果分隔符未找到,則返回的 3 元組中包含原序列以及兩個(gè)空的 bytes 或 bytearray 對(duì)象。

要搜索的分隔符可以是任意 bytes-like object。
bytes.replace(old, new[, count]) bytearray.replace(old, new[, count])
返回序列的副本,其中出現(xiàn)的所有子序列 old 都將被替換為 new。 如果給出了可選參數(shù) count,則只替換前 count 次出現(xiàn)。

要搜索的子序列及其替換序列可以是任意 bytes-like object。

注解

此方法的 bytearray 版本 并非 原地操作 —— 它總是產(chǎn)生一個(gè)新對(duì)象,即便沒(méi)有做任何改變。
bytes.rfind(sub[, start[, end]]) bytearray.rfind(sub[, start[, end]])
返回子序列 sub 在序列內(nèi)被找到的最大(最右)索引,這樣 sub 將包含在 s[start:end] 當(dāng)中。 可選參數(shù) start 與 end 會(huì)被解讀為切片表示法。 如果未找到則返回 -1。

要搜索的子序列可以是任意 bytes-like object 或是 0 至 255 范圍內(nèi)的整數(shù)。

在 3.3 版更改: 也接受 0 至 255 范圍內(nèi)的整數(shù)作為子序列。
bytes.rindex(sub[, start[, end]]) bytearray.rindex(sub[, start[, end]])
類似于 rfind(),但在子序列 sub 未找到時(shí)會(huì)引發(fā) ValueError。

要搜索的子序列可以是任意 bytes-like object 或是 0 至 255 范圍內(nèi)的整數(shù)。

在 3.3 版更改: 也接受 0 至 255 范圍內(nèi)的整數(shù)作為子序列。
bytes.rpartition(sep) bytearray.rpartition(sep)
在 sep 最后一次出現(xiàn)的位置拆分序列,返回一個(gè) 3 元組,其中包含分隔符之前的部分,分隔符本身或其 bytearray 副本,以及分隔符之后的部分。 如果分隔符未找到,則返回的 3 元組中包含兩個(gè)空的 bytes 或 bytearray 對(duì)象以及原序列的副本。

要搜索的分隔符可以是任意 bytes-like object。
bytes.startswith(prefix[, start[, end]]) bytearray.startswith(prefix[, start[, end]])
如果二進(jìn)制數(shù)據(jù)以指定的 prefix 開(kāi)頭則返回 True,否則返回 False。 prefix 也可以為由多個(gè)供查找的前綴構(gòu)成的元組。 如果有可選項(xiàng) start,將從所指定位置開(kāi)始檢查。 如果有可選項(xiàng) end,將在所指定位置停止比較。

要搜索的前綴可以是任意 bytes-like object。
bytes.translate(table, delete=b"") bytearray.translate(table, delete=b"")
返回原 bytes 或 bytearray 對(duì)象的副本,移除其中所有在可選參數(shù) delete 中出現(xiàn)的 bytes,其余 bytes 將通過(guò)給定的轉(zhuǎn)換表進(jìn)行映射,該轉(zhuǎn)換表必須是長(zhǎng)度為 256 的 bytes 對(duì)象。

你可以使用 bytes.maketrans() 方法來(lái)創(chuàng)建轉(zhuǎn)換表。

對(duì)于僅需移除字符的轉(zhuǎn)換,請(qǐng)將 table 參數(shù)設(shè)為 None:
    >>> b"read this short text".translate(None, b"aeiou")
    b"rd ths shrt txt"
在 3.6 版更改: 現(xiàn)在支持將 delete 作為關(guān)鍵字參數(shù)。

以下 bytes 和 bytearray 對(duì)象的方法的默認(rèn)行為會(huì)假定使用兼容 ASCII 的二進(jìn)制格式,但通過(guò)傳入適當(dāng)?shù)膮?shù)仍然可用于任意二進(jìn)制數(shù)據(jù)。 請(qǐng)注意本小節(jié)中所有的 bytearray 方法都 不是 原地執(zhí)行操作,而是會(huì)產(chǎn)生新的對(duì)象。

bytes.center(width[, fillbyte]) bytearray.center(width[, fillbyte])
返回原對(duì)象的副本,在長(zhǎng)度為 width 的序列內(nèi)居中,使用指定的 fillbyte 填充兩邊的空位(默認(rèn)使用 ASCII 空格符)。 對(duì)于 bytes 對(duì)象,如果 width 小于等于 len(s) 則返回原序列的副本。

注解

此方法的 bytearray 版本 并非 原地操作 —— 它總是產(chǎn)生一個(gè)新對(duì)象,即便沒(méi)有做任何改變。
bytes.ljust(width[, fillbyte]) bytearray.ljust(width[, fillbyte])
反回原對(duì)象的副本,在長(zhǎng)度為 width 的序列中靠左對(duì)齊。 使用指定的 fillbyte 填充空位(默認(rèn)使用 ASCII 空格符)。 對(duì)于 bytes 對(duì)象,如果 width 小于等于 len(s) 則返回原序列的副本。

注解

此方法的 bytearray 版本 并非 原地操作 —— 它總是產(chǎn)生一個(gè)新對(duì)象,即便沒(méi)有做任何改變。
bytes.lstrip([chars]) bytearray.lstrip([chars])
返回原序列的副本,移除指定的前導(dǎo)字節(jié)。 chars 參數(shù)為指定要移除字節(jié)值集合的二進(jìn)制序列 —— 這個(gè)名稱表明此方法通常是用于 ASCII 字符。 如果省略或?yàn)?None,則 chars 參數(shù)默認(rèn)移除 ASCII 空白符。 chars 參數(shù)并非指定單個(gè)前綴;而是會(huì)移除參數(shù)值的所有組合:
    >>> b"   spacious   ".lstrip()
    b"spacious   "
    >>> b"www.example.com".lstrip(b"cmowz.")
    b"example.com"
要移除的字節(jié)值二進(jìn)制序列可以是任意 bytes-like object。

注解

此方法的 bytearray 版本 并非 原地操作 —— 它總是產(chǎn)生一個(gè)新對(duì)象,即便沒(méi)有做任何改變。
bytes.rjust(width[, fillbyte]) bytearray.rjust(width[, fillbyte])
返回原對(duì)象的副本,在長(zhǎng)度為 width 的序列中靠右對(duì)齊。 使用指定的 fillbyte 填充空位(默認(rèn)使用 ASCII 空格符)。 對(duì)于 bytes 對(duì)象,如果 width 小于等于 len(s) 則返回原序列的副本。

注解

此方法的 bytearray 版本 并非 原地操作 —— 它總是產(chǎn)生一個(gè)新對(duì)象,即便沒(méi)有做任何改變。
bytes.rsplit(sep=None, maxsplit=-1) bytearray.rsplit(sep=None, maxsplit=-1)
將二進(jìn)制序列拆分為相同類型的子序列,使用 sep 作為分隔符。 如果給出了 maxsplit,則最多進(jìn)行 maxsplit 次拆分,從 最右邊 開(kāi)始。 如果 sep 未指定或?yàn)?None,任何只包含 ASCII 空白符的子序列都會(huì)被作為分隔符。 除了從右邊開(kāi)始拆分,rsplit() 的其他行為都類似于下文所述的 split()。
bytes.rstrip([chars]) bytearray.rstrip([chars])
返回原序列的副本,移除指定的末尾字節(jié)。 chars 參數(shù)為指定要移除字節(jié)值集合的二進(jìn)制序列 —— 這個(gè)名稱表明此方法通常是用于 ASCII 字符。 如果省略或?yàn)?None,則 chars 參數(shù)默認(rèn)移除 ASCII 空白符。 chars 參數(shù)并非指定單個(gè)后綴;而是會(huì)移除參數(shù)值的所有組合:
    >>> b"   spacious   ".rstrip()
    b"   spacious"
    >>> b"mississippi".rstrip(b"ipz")
    b"mississ"
要移除的字節(jié)值二進(jìn)制序列可以是任意 bytes-like object。

注解

此方法的 bytearray 版本 并非 原地操作 —— 它總是產(chǎn)生一個(gè)新對(duì)象,即便沒(méi)有做任何改變。
bytes.split(sep=None, maxsplit=-1) bytearray.split(sep=None, maxsplit=-1)
將二進(jìn)制序列拆分為相同類型的子序列,使用 sep 作為分隔符。 如果給出了 maxsplit 且非負(fù)值,則最多進(jìn)行 maxsplit 次拆分(因此,列表最多會(huì)有 maxsplit+1 個(gè)元素)。 如果 maxsplit 未指定或?yàn)?-1,則不限制拆分次數(shù)(進(jìn)行所有可能的拆分)。

如果給出了 sep,則連續(xù)的分隔符不會(huì)被組合在一起而是被視為分隔空子序列 (例如 b"1,,2".split(b",") 將返回 [b"1", b"", b"2"])。 sep 參數(shù)可能為一個(gè)多字節(jié)序列 (例如 b"1<>2<>3".split(b"<>") 將返回 [b"1", b"2", b"3"])。 使用指定的分隔符拆分空序列將返回 [b""] 或 [bytearray(b"")],具體取決于被拆分對(duì)象的類型。 sep 參數(shù)可以是任意 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 未指定或?yàn)?None,則會(huì)應(yīng)用另一種拆分算法:連續(xù)的 ASCII 空白符會(huì)被視為單個(gè)分隔符,其結(jié)果將不包含序列開(kāi)頭或末尾的空白符。 因此,在不指定分隔符的情況下對(duì)空序列或僅包含 ASCII 空白符的序列進(jìn)行拆分將返回 []。

例如:
    >>> 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])
返回原序列的副本,移除指定的開(kāi)頭和末尾字節(jié)。 chars 參數(shù)為指定要移除字節(jié)值集合的二進(jìn)制序列 —— 這個(gè)名稱表明此方法通常是用于 ASCII 字符。 如果省略或?yàn)?None,則 chars 參數(shù)默認(rèn)移除 ASCII 空白符。 chars 參數(shù)并非指定單個(gè)前綴或后綴;而是會(huì)移除參數(shù)值的所有組合:
    >>> b"   spacious   ".strip()
    b"spacious"
    >>> b"www.example.com".strip(b"cmowz.")
    b"example"
要移除的字節(jié)值二進(jìn)制序列可以是任意 bytes-like object。

注解

此方法的 bytearray 版本 并非 原地操作 —— 它總是產(chǎn)生一個(gè)新對(duì)象,即便沒(méi)有做任何改變。

以下 bytes 和 bytearray 對(duì)象的方法會(huì)假定使用兼容 ASCII 的二進(jìn)制格式,不應(yīng)當(dāng)被應(yīng)用于任意二進(jìn)制數(shù)據(jù)。 請(qǐng)注意本小節(jié)中所有的 bytearray 方法都 不是 原地執(zhí)行操作,而是會(huì)產(chǎn)生新的對(duì)象。

bytes.capitalize() bytearray.capitalize()
返回原序列的副本,其中每個(gè)字節(jié)將都將被解讀為一個(gè) ASCII 字符,并且第一個(gè)字節(jié)的字符大寫(xiě)而其余的小寫(xiě)。 非 ASCII 字節(jié)值將保持原樣不變。

注解

此方法的 bytearray 版本 并非 原地操作 —— 它總是產(chǎn)生一個(gè)新對(duì)象,即便沒(méi)有做任何改變。
bytes.expandtabs(tabsize=8) bytearray.expandtabs(tabsize=8)
返回序列的副本,其中所有的 ASCII 制表符會(huì)由一個(gè)或多個(gè) ASCII 空格替換,具體取決于當(dāng)前列位置和給定的制表符寬度。 每 tabsize 個(gè)字節(jié)設(shè)為一個(gè)制表位(默認(rèn)值 8 時(shí)設(shè)定的制表位在列 0, 8, 16 依次類推)。 要展開(kāi)序列,當(dāng)前列位置將被設(shè)為零并逐一檢查序列中的每個(gè)字節(jié)。 如果字節(jié)為 ASCII 制表符 (b"	"),則并在結(jié)果中插入一個(gè)或多個(gè)空格符,直到當(dāng)前列等于下一個(gè)制表位。 (制表符本身不會(huì)被復(fù)制。) 如果當(dāng)前字節(jié)為 ASCII 換行符 (b"
") 或回車符 (b"
"),它會(huì)被復(fù)制并將當(dāng)前列重設(shè)為零。 任何其他字節(jié)會(huì)被不加修改地復(fù)制并將當(dāng)前列加一,不論該字節(jié)值在被打印時(shí)會(huì)如何顯示:
    >>> b"01	012	0123	01234".expandtabs()
    b"01      012     0123    01234"
    >>> b"01	012	0123	01234".expandtabs(4)
    b"01  012 0123    01234"
注解

此方法的 bytearray 版本 并非 原地操作 —— 它總是產(chǎn)生一個(gè)新對(duì)象,即便沒(méi)有做任何改變。
bytes.isalnum() bytearray.isalnum()
如果序列中所有字節(jié)都是字母類 ASCII 字符或 ASCII 十進(jìn)制數(shù)碼并且序列非空則返回真值,否則返回假值。 字母類 ASCII 字符就是字節(jié)值包含在序列 b"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 中的字符。 ASCII 十進(jìn)制數(shù)碼就是字節(jié)值包含在序列 b"0123456789" 中的字符。

例如:
    >>> b"ABCabc1".isalnum()
    True
    >>> b"ABC abc1".isalnum()
    False
bytes.isalpha() bytearray.isalpha()
如果序列中所有字節(jié)都是字母類 ASCII 字符并且序列非空則返回真值,否則返回假值。 字母類 ASCII 字符就是字節(jié)值包含在序列 b"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 中的字符。

例如:
    >>> b"ABCabc".isalpha()
    True
    >>> b"ABCabc1".isalpha()
    False
bytes.isascii() bytearray.isascii()
如果序列為空或序列中所有字節(jié)都是 ASCII 字節(jié)則返回真值,否則返回假值。 ASCII 字節(jié)的取值范圍是 0-0x7F。

3.7 新版功能.
bytes.isdigit() bytearray.isdigit()
如果序列中所有字節(jié)都是 ASCII 十進(jìn)制數(shù)碼并且序列非空則返回真值,否則返回假值。 ASCII 十進(jìn)制數(shù)碼就是字節(jié)值包含在序列 b"0123456789" 中的字符。

例如:
    >>> b"1234".isdigit()
    True
    >>> b"1.23".isdigit()
    False
bytes.islower() bytearray.islower()
如果序列中至少有一個(gè)小寫(xiě) ASCII 字符并且沒(méi)有大寫(xiě) ASCII 字符則返回真值,否則返回假值。

例如:
    >>> b"hello world".islower()
    True
    >>> b"Hello world".islower()
    False
小寫(xiě) ASCII 字符就是字節(jié)值包含在序列 b"abcdefghijklmnopqrstuvwxyz" 中的字符。 大寫(xiě) ASCII 字符就是字節(jié)值包含在序列 b"ABCDEFGHIJKLMNOPQRSTUVWXYZ" 中的字符。
bytes.isspace() bytearray.isspace()
如果序列中所有字節(jié)都是 ASCII 空白符并且序列非空則返回真值,否則返回假值。 ASCII 空白符就是字節(jié)值包含在序列 b" 	

x0bf" (空格, 制表, 換行, 回車, 垂直制表, 換頁(yè)) 中的字符。
bytes.istitle() bytearray.istitle()
如果序列為 ASCII 標(biāo)題形式并且序列非空則返回真值,否則返回假值。 請(qǐng)參閱 bytes.title() 了解有關(guān)“標(biāo)題形式”的詳細(xì)定義。

例如:
    >>> b"Hello World".istitle()
    True
    >>> b"Hello world".istitle()
    False
bytes.isupper() bytearray.isupper()
如果序列中至少有一個(gè)大寫(xiě)字母 ASCII 字符并且沒(méi)有小寫(xiě) ASCII 字符則返回真值,否則返回假值。

例如:
    >>> b"HELLO WORLD".isupper()
    True
    >>> b"Hello world".isupper()
    False
小寫(xiě) ASCII 字符就是字節(jié)值包含在序列 b"abcdefghijklmnopqrstuvwxyz" 中的字符。 大寫(xiě) ASCII 字符就是字節(jié)值包含在序列 b"ABCDEFGHIJKLMNOPQRSTUVWXYZ" 中的字符。
bytes.lower() bytearray.lower()
返回原序列的副本,其所有大寫(xiě) ASCII 字符均轉(zhuǎn)換為對(duì)應(yīng)的小寫(xiě)形式。

例如:
    >>> b"Hello World".lower()
    b"hello world"
小寫(xiě) ASCII 字符就是字節(jié)值包含在序列 b"abcdefghijklmnopqrstuvwxyz" 中的字符。 大寫(xiě) ASCII 字符就是字節(jié)值包含在序列 b"ABCDEFGHIJKLMNOPQRSTUVWXYZ" 中的字符。

注解

此方法的 bytearray 版本 并非 原地操作 —— 它總是產(chǎn)生一個(gè)新對(duì)象,即便沒(méi)有做任何改變。
bytes.splitlines(keepends=False) bytearray.splitlines(keepends=False)
返回由原二進(jìn)制序列中各行組成的列表,在 ASCII 行邊界符的位置拆分。 此方法使用 universal newlines 方式來(lái)分行。 結(jié)果列表中不包含換行符,除非給出了 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(),當(dāng)給出了分隔符 sep 時(shí),對(duì)于空字符串此方法將返回一個(gè)空列表,而末尾的換行不會(huì)令結(jié)果中增加額外的行:
    >>> 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()
返回原序列的副本,其所有小寫(xiě) ASCII 字符均轉(zhuǎn)換為對(duì)應(yīng)的大寫(xiě)形式,反之亦反。

例如:
    >>> b"Hello World".swapcase()
    b"hELLO wORLD"
小寫(xiě) ASCII 字符就是字節(jié)值包含在序列 b"abcdefghijklmnopqrstuvwxyz" 中的字符。 大寫(xiě) ASCII 字符就是字節(jié)值包含在序列 b"ABCDEFGHIJKLMNOPQRSTUVWXYZ" 中的字符。

不同于 str.swapcase(),在些二進(jìn)制版本下 bin.swapcase().swapcase() == bin 總是成立。 大小寫(xiě)轉(zhuǎn)換在 ASCII 中是對(duì)稱的,即使其對(duì)于任意 Unicode 碼位來(lái)說(shuō)并不總是成立。

注解

此方法的 bytearray 版本 并非 原地操作 —— 它總是產(chǎn)生一個(gè)新對(duì)象,即便沒(méi)有做任何改變。
bytes.title() bytearray.title()
返回原二進(jìn)制序列的標(biāo)題版本,其中每個(gè)單詞以一個(gè)大寫(xiě) ASCII 字符為開(kāi)頭,其余字母為小寫(xiě)。 不區(qū)別大小寫(xiě)的字節(jié)值將保持原樣不變。

例如:
    >>> b"Hello world".title()
    b"Hello World"
小寫(xiě) ASCII 字符就是字節(jié)值包含在序列 b"abcdefghijklmnopqrstuvwxyz" 中的字符。 大寫(xiě) ASCII 字符就是字節(jié)值包含在序列 b"ABCDEFGHIJKLMNOPQRSTUVWXYZ" 中的字符。 所有其他字節(jié)值都不區(qū)分大小寫(xiě)。

該算法使用一種簡(jiǎn)單的與語(yǔ)言無(wú)關(guān)的定義,將連續(xù)的字母組合視為單詞。 該定義在多數(shù)情況下都很有效,但它也意味著代表縮寫(xiě)形式與所有格的撇號(hào)也會(huì)成為單詞邊界,這可能導(dǎo)致不希望的結(jié)果:
    >>> b"they"re bill"s friends from the UK".title()
    b"They"Re Bill"S Friends From The Uk"
可以使用正則表達(dá)式來(lái)構(gòu)建針對(duì)撇號(hào)的特別處理:
    >>> 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 版本 并非 原地操作 —— 它總是產(chǎn)生一個(gè)新對(duì)象,即便沒(méi)有做任何改變。
bytes.upper() bytearray.upper()
返回原序列的副本,其所有小寫(xiě) ASCII 字符均轉(zhuǎn)換為對(duì)應(yīng)的大寫(xiě)形式。

例如:
    >>> b"Hello World".upper()
    b"HELLO WORLD"
小寫(xiě) ASCII 字符就是字節(jié)值包含在序列 b"abcdefghijklmnopqrstuvwxyz" 中的字符。 大寫(xiě) ASCII 字符就是字節(jié)值包含在序列 b"ABCDEFGHIJKLMNOPQRSTUVWXYZ" 中的字符。

注解

此方法的 bytearray 版本 并非 原地操作 —— 它總是產(chǎn)生一個(gè)新對(duì)象,即便沒(méi)有做任何改變。
bytes.zfill(width) bytearray.zfill(width)
返回原序列的副本,在左邊填充 b"0" 數(shù)碼使序列長(zhǎng)度為 width。 正負(fù)值前綴 (b"+"/ b"-") 的處理方式是在正負(fù)符號(hào) 之后 填充而非在之前。 對(duì)于 bytes 對(duì)象,如果 width 小于等于 len(seq) 則返回原序列。

例如:
    >>> b"42".zfill(5)
    b"00042"
    >>> b"-42".zfill(5)
    b"-0042"
注解

此方法的 bytearray 版本 并非 原地操作 —— 它總是產(chǎn)生一個(gè)新對(duì)象,即便沒(méi)有做任何改變。
printf 風(fēng)格的字節(jié)串格式化

注解

此處介紹的格式化操作具有多種怪異特性,可能導(dǎo)致許多常見(jiàn)錯(cuò)誤(例如無(wú)法正確顯示元組和字典)。 如果要打印的值可能為元組或字典,請(qǐng)將其放入一個(gè)元組中。

字節(jié)串對(duì)象 (bytes/bytearray) 具有一種特殊的內(nèi)置操作:使用 % (取模) 運(yùn)算符。 這也被稱為字節(jié)串的 格式化 或 插值 運(yùn)算符。 對(duì)于 format % values (其中 format 為一個(gè)字節(jié)串對(duì)象),在 format 中的 % 轉(zhuǎn)換標(biāo)記符將被替換為零個(gè)或多個(gè) values 條目。 其效果類似于在 C 語(yǔ)言中使用 sprintf()。

如果 format 要求一個(gè)多帶帶參數(shù),則 values 可以為一個(gè)非元組對(duì)象。 5 否則的話,values 必須或是是一個(gè)包含項(xiàng)數(shù)與格式字節(jié)串對(duì)象中指定的轉(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í),字節(jié)串對(duì)象中的格式 必須 包含加圓括號(hào)的映射鍵,對(duì)應(yīng) "%" 字符之后字典中的每一項(xiàng)。 映射鍵將從映射中選取要格式化的值。 例如:

>>> print(b"%(language)s has %(number)03d quote types." %
...       {b"language": b"Python", b"number": 2})
b"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)說(shuō)沒(méi)有必要 -- 所以 %ld 等價(jià)于 %d。

轉(zhuǎn)換類型為:

注釋:

此替代形式會(huì)在第一個(gè)數(shù)碼之前插入標(biāo)示八進(jìn)制數(shù)的前綴 ("0o")。

此替代形式會(huì)在第一個(gè)數(shù)碼之前插入 "0x" 或 "0X" 前綴(取決于是使用 "x" 還是 "X" 格式)。

此替代形式總是會(huì)在結(jié)果中包含一個(gè)小數(shù)點(diǎn),即使其后并沒(méi)有數(shù)碼。

小數(shù)點(diǎn)后的數(shù)碼位數(shù)由精度決定,默認(rèn)為 6。

此替代形式總是會(huì)在結(jié)果中包含一個(gè)小數(shù)點(diǎn),末尾各位的零不會(huì)如其他情況下那樣被移除。

小數(shù)點(diǎn)前后的有效數(shù)碼位數(shù)由精度決定,默認(rèn)為 6。

如果精度為 N,輸出將截短為 N 個(gè)字符。

b"%s" 已棄用,但在 3.x 系列中將不會(huì)被移除。

b"%r" 已棄用,但在 3.x 系列中將不會(huì)被移除。

參見(jiàn) PEP 237。

注解

此方法的 bytearray 版本 并非 原地操作 —— 它總是產(chǎn)生一個(gè)新對(duì)象,即便沒(méi)有做任何改變。

參見(jiàn)

PEP 461 - 為 bytes 和 bytearray 添加 % 格式化

3.5 新版功能.

上一篇文章:Python標(biāo)準(zhǔn)庫(kù)---12、內(nèi)置類型:文本序列類型(str)
下一篇文章:

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/44002.html

相關(guān)文章

  • Python標(biāo)準(zhǔn)庫(kù)---14、內(nèi)置類型進(jìn)制序列類型 (memoryview)

    摘要:對(duì)于更高的維度,其長(zhǎng)度等于表示的嵌套列表的長(zhǎng)度。這是數(shù)組在連續(xù)表示時(shí)將會(huì)占用的空間總字節(jié)數(shù)。該值僅作為參考信息。新版功能一個(gè)表明內(nèi)存是否為的布爾值。新版功能上一篇文章標(biāo)準(zhǔn)庫(kù)內(nèi)置類型二進(jìn)制序列類型下一篇文章標(biāo)準(zhǔn)庫(kù)內(nèi)置類型集合類型映射類型 上一篇文章:Python標(biāo)準(zhǔn)庫(kù)---13、內(nèi)置類型:二進(jìn)制序列類型 ( bytes, bytearray)下一篇文章:Python標(biāo)準(zhǔn)庫(kù)---15、內(nèi)置...

    yacheng 評(píng)論0 收藏0
  • Python標(biāo)準(zhǔn)庫(kù)---12、內(nèi)置類型:文本序列類型(str)

    摘要:上一篇文章標(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)下一篇文章:Python標(biāo)準(zhǔn)庫(kù)---13、內(nèi)置類型:二進(jìn)制序列類型 ( bytes, bytear...

    luoyibu 評(píng)論0 收藏0
  • Python3,68個(gè)內(nèi)置庫(kù)函數(shù)詳解,進(jìn)階必備,必須收藏??!!

    摘要:判斷奇數(shù)是迭代器會(huì)根據(jù)提供的函數(shù)對(duì)指定序列做映射語(yǔ)法可以對(duì)可迭代對(duì)象中的每一個(gè)元素進(jìn)行映射。 python內(nèi)置庫(kù)詳解 1、引言2、內(nèi)置庫(kù)詳解2.1 數(shù)據(jù)相關(guān)2.1...

    lindroid 評(píng)論0 收藏0
  • Python學(xué)習(xí)之路23-文本和字節(jié)序列

    摘要:字符編碼表,碼位碼元將編碼字符集中的碼位轉(zhuǎn)換成有限比特長(zhǎng)度的整型值的序列。字符編碼方案,碼元序列化也稱為常說(shuō)的序列化。每個(gè)字節(jié)里的二進(jìn)制數(shù)就是字節(jié)序列。另一個(gè)情況則是壓縮字節(jié)序列的值,如或進(jìn)程長(zhǎng)度編碼等無(wú)損壓縮技術(shù)。 《流暢的Python》筆記。本篇主要講述不同編碼之間的轉(zhuǎn)換問(wèn)題,比較繁雜,如果平時(shí)處理文本不多,或者語(yǔ)言比較單一,沒(méi)有多語(yǔ)言文本處理的需求,則可以略過(guò)此篇。 1. 前言 ...

    anRui 評(píng)論0 收藏0
  • Python標(biāo)準(zhǔn)庫(kù)---1、內(nèi)置函數(shù)(A-B-C)

    摘要:內(nèi)置函數(shù)返回一個(gè)數(shù)的絕對(duì)值。使用標(biāo)準(zhǔn)的真值測(cè)試過(guò)程來(lái)轉(zhuǎn)換。因此,構(gòu)造函數(shù)的實(shí)參和相同。實(shí)參的合法范圍是到進(jìn)制表示是。數(shù)字類型描述了復(fù)數(shù)類型。上一篇文章標(biāo)準(zhǔn)庫(kù)簡(jiǎn)介下一篇文章標(biāo)準(zhǔn)庫(kù)內(nèi)置函數(shù) 上一篇文章:Python標(biāo)準(zhǔn)庫(kù)----0、簡(jiǎn)介下一篇文章:Python標(biāo)準(zhǔn)庫(kù)---1、內(nèi)置函數(shù)(D-E-F) Python 解釋器內(nèi)置了很多函數(shù)和類型,您可以在任何時(shí)候使用它們。以下按字母表順序列出它...

    bingo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<