pythonbytes 字节对象基础与深度用法

Python bytes 是不可变的字节序列类型,专门用来存储原始二进制数据,和 str 字符串有本质区别,str 是 Unicode 字符,bytes 是单个字节数值,范围限定在 0 到 255,很多新手做网络传输文件读写的时候,经常混淆 str 和 bytes,导致编码报错,bytes 不能直接修改里面单个元素,需要改动的时候一般转成 bytearray 可变字节数组,创建的时候第一步确定数据源,第二步选择创建方式,第三步处理编码转换,第四步进行切片索引,第五步完成二进制读写或者网络通信,掌握 pythonbytes 类型,是做爬虫 socket 二进制文件处理必备知识点。

一 pythonbytes 核心定义

bytes 里面每一个元素都是 0 到 255 的整数,对象创建之后内容固定,不能原地修改,属于不可变序列,支持索引切片迭代,和 list 用法相似,但是元素只能是字节数值。

字面量写法是前面加 b 前缀,例如 b hello,注意 b 前缀里面的字符默认是 ASCII,非 ASCII 中文不能直接写在 b 引号里面,必须通过编码生成。

二 pythonbytes 创建方式

创建方式语法示例说明
字面量创建b abc仅支持 ASCII 字符
str 编码转换字符串.encode utf8最常用,把字符串转 pythonbytes
整数序列构造bytes([65,66,67])传入 0 到 255 整数列表
零填充构造bytes(10)生成 10 个全 0 字节

三 pythonbytes 与 str 对比表

对比项目pythonbytesstr 字符串
本质原始二进制字节Unicode 字符
前缀b无
编码本身不带编码本身是 Unicode
转换encode 得到 bytesdecode 把 bytes 转回 str
适用场景网络传输 文件二进制读写文本展示

四 深度技术要点

1 pythonbytes 是不可变,不能写 data [0] = 97,执行会报错,如果需要可变字节序列,使用 bytearray,bytearray 支持原地修改,和 pythonbytes 可以互相转换

2 编码转换必须指定编码,中文场景绝大多数使用 utf8,同样 pythonbytes 解码的时候编码必须匹配,编码不匹配会抛出 UnicodeDecodeError

3 索引读取 pythonbytes,得到的是整数,不是字符,例如 b abc 索引 0 取出结果是 97,不是 a,这点非常容易踩坑

4 pythonbytes 支持切片,切片之后仍然返回新的 pythonbytes 对象,不会改变原对象

5 网络 socket 接口返回的数据类型默认就是 pythonbytes,读取图片音频文件 rb 模式打开,读出来的数据也是 pythonbytes

6 拼接 pythonbytes 使用加号,大量拼接性能差,大批量拼接推荐使用 join 方法,和字符串 join 逻辑类似

五 常用操作清单

1 字符串转 pythonbytes s.encode utf8

2 pythonbytes 转回字符串 data.decode utf8

3 索引读取单个字节值 data [0]

4 切片截取部分字节 data [1:4]

5 拼接多个 pythonbytes b1 + b2

6 转换可变字节数组 bytearray (data)

六 常见踩坑说明

1 中文直接写 b 中文 会语法报错,必须 encode 编码生成 pythonbytes

2 忘记 decode,直接打印 pythonbytes,控制台会显示 b 前缀,很多人误以为是乱码

3 编码不一致,utf8 编码生成的 pythonbytes,用 gbk 解码直接报错

4 尝试修改 pythonbytes 单个字节,触发不可变类型异常

【常见问题】

问题 1 pythonbytes 和 str 有什么区别

回答 1 pythonbytes 是二进制字节序列,str 是 Unicode 文本,pythonbytes 需要 decode 才能变成 str,str 通过 encode 生成 pythonbytes,网络和二进制文件操作必须使用 pythonbytes

问题 2 pythonbytes 可以修改里面单个字节吗

回答 1 pythonbytes 属于不可变类型,不能直接修改单个字节,pythonbytes 如果需要修改,可以转成 bytearray 可变字节数组,修改完成之后再转回 pythonbytes

问题 3 pythonbytes 索引取值为什么是数字

回答 1 pythonbytes 每一个元素本质就是 0 到 255 整数,pythonbytes 索引读取得到整数,不是字符,如果需要字符要通过 chr 函数转换

问题 4 pythonbytes 中文怎么创建

回答 1 pythonbytes 中文不能直接加 b 前缀,pythonbytes 正确做法是中文字符串调用 encode,指定 utf8 编码,生成对应的 pythonbytes 字节对象

【免责申明】

本文 pythonbytes 相关内容基于 Python 标准语法编写,不同 Python 版本行为基本一致,特殊第三方二进制库请以官方文档为准,本内容仅作技术参考,不对编码转换业务异常承担责任。

本文来自作者[人间知微笺]投稿,不代表启知新能源网立场,如若转载,请注明出处:https://www.qzdaily.com.cn/shbk/202611/7276.html

赞 (24)

今日大家都在搜的词:

发表回复

本站作者后才能评论

评论列表(4条)

  • 人间知微笺
    人间知微笺 2026年11月11日

    我是启知新能源网的签约作者“人间知微笺”!

  • 人间知微笺
    人间知微笺 2026年11月11日

    希望本篇文章《pythonbytes 字节对象基础与深度用法》能对你有所帮助!

  • 人间知微笺
    人间知微笺 2026年11月11日

    本站[启知新能源网]内容主要涵盖:光伏,风电,储能,氢能,户用光伏,家用光伏,光伏投资,光伏新闻,光伏政策,太阳能,多晶硅,逆变器,太阳能电池,光热,组件

  • 人间知微笺
    人间知微笺 2026年11月11日

    本文概览:Python bytes 是不可变的字节序列类型,专门用来存储原始二进制数据,和 str 字符串有本质区别,str 是 Unicode 字符,bytes 是单个字节数值,范围限定在 0 到 255,很多新手做网络传输文件读写的时候,经常混淆 str 和 bytes,导致编码报错,bytes 不能直接修改里面单个元素,需要改动的时候一般转成 bytearray 可变字节数组,创建的时候第一步确定数据源,第二步选择创建方式,第三步处理编码转换,第四步进行切片索引,第五步完成二进制读写或者网络通信,掌握 pythonbytes 类型,是做爬虫 socket 二进制文件处理必备知识点。

联系我们

联系:143 0457 151

工作时间:周一至周五,9:30-18:30,节假日休息

关注我们