首页 > 编程知识 正文

Python3 字节类型 bytes 和 bytearray

时间:2023-05-06 10:03:50 阅读:243875 作者:2734

本文链接: https://blog.csdn.net/xietansheng/article/details/115557553

Python3 学习笔记(目录)

1. bytes

Python 官网 bytes: Bytes Objects

bytes 对象是由单个字节构成的 不可变字节序列,该序列的每个元素都为 [0, 255] 区间内的整数。

bytes 的构造方法:

class bytes([source[, encoding[, errors]]])

参数:

source 为整数,则返回长度为 source,元素以零值填充的字节序列。source 为字符串,则使用 encoding 把字符串编码为字节序列。source 为可迭代类型(list、bytes等),则迭代元素必为[0, 255] 区间内的整数,迭代元素的整数值依次作为字节序列的字节数值。不传任何参数,返回长度为 0 的字节序列,即 b’’。

bytes 对象还可以使用字符串字面值语法来创建,在字符串字面值前加b前缀:

单引号: b'同样允许嵌入"双"引号'双引号: b"同样允许嵌入'单'引号"三重引号: b'''三重单引号''' 或 b"""三重双引号"""原生字符串: br'原生字符串n不转义'

bytes 的字面值中只允许 ASCII 字符,如果字符编码值超过 127,则必须使用相应的转义形式表示,例如b"xFFxEF"。

使用字面值语法创建 bytes 实例:

>>> a = b"abc123" # 创建 bytes, 把字符的 ASCII 值转换为 bytes 的元素数值,>>> a # 其中的 ASCII 字母并不是表示字母字符, b'abc123' # 而是表示其对应的 ASCII 的一个整数值>>> type(a)<class 'bytes'>>>> >>> a[0] # bytes 元素的类型为整数97>>> type(a[0])<class 'int'>>>> >>> a = b"ax62xFF" # 使用 x 转义, x62 表示一个字节元素>>> ab'abxff'>>> a[2]255

使用 bytes 构造方法创建实例:

>>> a = bytes(3) # 创建一个长度为 3, 元素值为 0 的 bytes>>> ab'x00x00x00'>>> >>> a = bytes("abc你好", "utf-8") # 把字符串编码为 bytes>>> ab'abcxe4xbdxa0xe5xa5xbd'>>> >>> a = bytes([1, 2, 3, 65, 97]) # 把整数列表中的各元素串起来转换为 bytes>>> ab'x01x02x03Aa'

十六进制字符串 与 bytes 之间的转换:

>>> bytes.fromhex("FFEF6162") # 十六进制 -> bytesb'xffxefab'>>> >>> b'xffxefab'.hex() # bytes -> 十六进制'ffef6162'

字符串 与 bytes 之间的转换:

>>> # str -> bytes: str.encode(encoding)>>> # bytes -> str: bytes.decode(encoding)>>>>>> # 字符串 编码为 bytes>>> "abc你好".encode("utf-8")b'abcxe4xbdxa0xe5xa5xbd'>>> >>> # bytes 解码为 字符串>>> b'abcxe4xbdxa0xe5xa5xbd'.decode("utf-8")'abc你好'

附加: 字符 与 Uhicode 之间的转换

chr(int) # Unicode整数值 -> 字符(单个字符)ord(str) # 字符(单个字符) -> Unicode整数值ascii(obj|str) # 对象的字符串形式, 把其中非 ASCII 字符使用 u 编码 2. bytearray

Python 官网 bytearray: Bytearray Objects

bytearray 对象是由单个字节构成的 可变字节序列,该序列的每个元素都为 [0, 255] 区间内的整数。bytearray 是 bytes 的可变版本(内容和长度均可变)。

bytearray 的构造方法:

class bytearray([source[, encoding[, errors]]])

bytearray 构造方法的参数与 bytes 一致:

source 为整数,则返回长度为 source,元素以零值填充的字节数组。source 为字符串,则使用 encoding 把字符串编码为字节数组。source 为可迭代类型(list、bytes等),则迭代元素必为[0, 255] 区间内的整数,迭代元素的整数值依次作为字节序列的字节数值。不传任何参数,返回一个空数组。

创建 bytearray 实例:

>>> a = bytearray(3) # 创建一个长度为 3, 元素值为 0 的 bytearray>>> abytearray(b'x00x00x00')>>> a[0] = 97; a[1] = 255 # 修改数字元素的值>>> abytearray(b'axffx00')>>> a.append(65) # 追加一个元素到末尾>>> abytearray(b'axffx00A')>>> >>> a = bytearray("abc你好", "utf-8") # 编码字符串创建 bytearray>>> abytearray(b'abcxe4xbdxa0xe5xa5xbd')>>> >>> a = bytearray([1, 2, 3, 65, 97]) # 把整数列表中的各元素串起来转换为 bytearray>>> abytearray(b'x01x02x03Aa')>>> >>> a = bytearray(b"abc123") # 根据 bytes 序列创建 bytearray>>> abytearray(b'abc123') 3. bytes 与 bytearray 对象的方法

bytes 与 bytearray 相比,除了可改变的特性之外,其他基本相同,bytes 有的方法 bytearray 都有。bytes 和 bytearray 的相关操作的方法和 str 的方法相类似。

bytearray 特有的方法:

def append(item: int) -> None # 添加一个元素到末尾, 值为 [0, 255] 区间内的整数def insert(index: int, item: int) -> None # 在 index 位置插入一个元素, 值为 [0, 255] 区间内的整数def extend(iterable) -> None # 把可迭代对象的所有元素依次添加到数组的末尾, # 迭代元素的值必须为 [0, 255] 区间内的整数def remove(item: int) -> None # 移除一个元素, 从左到右查找def pop(index: int = -1) -> int # 移除并返回指定位置元素, 默认是最后一个def reverse() -> None # 反转所有数组元素def copy() -> bytearray # 复制数组的内容, 创建其副本返回def clear() -> None # 清空数组内的所有元素

bytes 与 bytearray 的相同方法:

def index(sub, start=None, end=None) # 左往右查找子序列在序列中的位置, 找不到抛出异常def rindex(sub, start=None, end=None) # 右往左查找子序列在序列中的位置, 找不到抛出异常def find(sub, start=None, end=None) # 左往右查找子序列在序列中的位置, 找不到返回 -1def rfind(sub, start=None, end=None) # 右往左查找子序列在序列中的位置, 找不到返回 -1def startswith(prefix, start=None, end=None) # 判断序列是否已指定前缀开头def endswith(suffix, start=None, end=None) # 判断序列是否已指定后缀结尾def upper() # 把序列中的所有字母转换为大写def lower() # 把序列中的所有字母转换为小写def title() # 标题化序列, 所有单词首字母大写, 其他字母小写def capitalize() # 将序列中的第一个字符转换为大写def swapcase() # 序列中的字母, 大写转换为小写, 小写转换为大写def lstrip(chars=b" trn") # 删除左边所有 chars 中出现过的字节元素def rstrip(chars=b" trn") # 删除右边所有 chars 中出现过的字节元素def strip(chars=b" trn") # 删除两边所有 chars 中出现过的字节元素def ljust(width, fillchar=b" ") # 原序列左对齐返回, 最小宽度为 width, 不够使用 fillchar 字节填充def rjust(width, fillchar=b" ") # 原序列右对齐返回, 最小宽度为 width, 不够使用 fillchar 字节填充def center(width, fillchar=b" ") # 原序列居中对齐返回, 最小宽度为 width, 不够使用 fillchar 字符填充def zfill(width) # 原序列右对齐返回, 最小宽度为 width, 不够使用 b"0" 填充@classmethod def fromhex(hex_str) # 类方法, 从十六进制表示的字符串创建序列(bytes/bytearray)def hex() # 把字节序列以十六进制字符串的形式表示并返回def decode(encoding) # 把字节序列以指定编码格式解码为字符串def split(sep, maxsplit=-1) # 从左往右切分序列, maxsplit 表示最大切分次数, -1表示不限制def rsplit(sep, maxsplit=-1) # 从右往左切分序列, maxsplit 表示最大切分次数, -1表示不限制def splitlines(keepends=False) # 以换行符(b"r", b"rn", b"n")作为分隔符切分序列, # keepends 表示结果子序列是否保留换行符def join(iterable[bytes/bytearray]) # 把 iterable 中的所有元素用本序列对象作为连接符连接成新的一个序列def replace(old, new, count=-1) # 序列替换, count 表示最大替换次数, -1表示替换所有, 返回替换后的副本def expandtabs(tabsize=8) # 把序列中的 b"t" 替换为空格def isupper() # 所有字母是否为大写(不包括无大小写的字符)def islower() # 所有字母是否为小写(不包括无大小写的字符)def isdigit() # 序列是否只包含数字字符def isalnum() # 序列是否只由字母和数字组成def isalpha() # 序列是否只由字母组成def isascii() # 序列是否为空 或 所有字符均为 ASCII 字符(U+0000-U+007F)def isspace() # 序列是否只包含空格def istitle() # 序列是否是标题(所有的单词首字大写, 其他字母小写)def partition(sep) # sep(序列)首次出现的位置拆分序列, # 返回一个 3 元祖 (seq前面的子序列, seq, seq后面的子序列)def rpartition(sep) # sep(序列)最后一次出现的位置拆分序列, # 返回一个 3 元祖 (seq前面的子序列, seq, seq后面的子序列)def count(sub, start=None, end=None) # 子序列 sub 在 [start, end] 范围内非重叠出现的次数def maketrans(frm, to) # 创建字节映射的 转换表, frm 和 to 是长度相同的 bytes(字节相对映)def translate(table, del=b"") # 根据 转换表, 转换字节序列中的字节, del 表示需要删除的字节

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。