Python中bytes类型详解及与str的互相转换

  • 问题背景

数字货币交易,从交易所获取的数据是bytes类型。这个并不常见。

常见的Python标准数据类型有六种:

  1. Number(数字)—不可变数据
    1. int
    2. float
    3. bool
    4. complex
  2. String(字符串)—不可变数据
    1. ‘str’
    2. “str”
    3. \转义特殊字符
  3. List(列表)—可变数据
    1. [a, b, c]
  4. Tuple(元组)—不可变数据
    1. (1, b)
  5. Set(集合)—可变数据
    1. {‘a’, ‘b’, ‘c’}
  6. Dictionary(字典)—可变数据
    1. {‘key’:‘value’}
  • 问题解答

<class ‘bytes’>

bytes表示字节序列,是一个不可变的数据类型,对应的可变形式是bytearray,也就是字节数组。

这两种数据类型,内存中开辟的存储都是连续的。

在常用的ASCII、utf-8 和unicode 编码中,像 a 这样一个英文字符,在内存中占一个字节。一个汉字在ASCII和unicode编码里占两个字节,在utf-8 编码中占三个字节。

一个字节有八位,也就是八个数字,也叫8个bit(二进制) 。

计算机中的最小储存单位就是bit,bit是二进制的,所以计算机中的数据全都是0和1,没有其他的数字。

  • str与bytes

python3中,字符串(str)是unicode格式,字节(bytes)包括utf-8,gbk等等。

网络传输,硬盘保存是以字节格式保存的。

Bytes 对象是由单个字节作为基本元素(8位,取值范围 0-255)组成的序列,为不可变对象。

Bytes 对象只负责以二进制字节序列的形式记录所需记录的对象,至于该对象到底表示什么(比如到底是什么字符)则由相应的编码格式(utf-8、gbk…)解码所决定。

Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分。文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python 3不会以任意隐式的方式混用str和bytes,正是这使得两者的区分特别清晰。你不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然 )。

bytes是一种比特流,它的存在形式是01010001110这种。我们无论是在写代码,还是阅读文章的过程中,肯定不会有人直接阅读这种比特流,它必须有一个编码方式,使得它变成有意义的比特流,而不是一堆晦涩难懂的01组合。因为编码方式的不同,对这个比特流的解读也会不同.

字符串类str里有一个==encode()==方法,它是从字符串向比特流的编码过程。

bytes类型恰好有个==decode()==方法,它是从比特流向字符串解码的过程。除此之外,我们查看Python源码会发现bytes和str拥有几乎一模一样的方法列表,最大的区别就是encode和decode。

从实质上来说,字符串在磁盘上的保存形式也是01的组合,也需要编码解码。

总结来说:

  1. 在将字符串存入磁盘和从磁盘读取字符串的过程中,Python自动地帮你完成了编码和解码的工作,你不需要关心它的过程。
  2. 使用bytes类型,实质上是告诉Python,不需要它帮你自动地完成编码和解码的工作,而是用户自己手动进行,并指定编码格式。
  3. Python已经严格区分了bytes和str两种数据类型,你不能在需要bytes类型参数的时候使用str参数,反之亦然。这点在读写磁盘文件时容易碰到。
  • bytes.decode()方法

decode() 方法以指定的编码格式解码 bytes 对象。默认编码为 ‘utf-8’。

bytes.decode(encoding=“utf-8”, errors=“strict”)

.
.
.
2019-01-21 22:22:04写于邹平

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值