bytes类型是python3新增的一种数据类型,用来代表字节串。字符串由多个字符串构成,以字符为单位进行操作,字节串由多个字节构成,以字节为单位进行操作。他们除了操作单元不同,其他的用法基本相同,bytes类型数据也是不可变对象。

bytes类型数据的应用场景
  • 计算MD5
  1. import hashlib
  2. string = "123456"
  3. m = hashlib.md5() # 创建md5对象
  4. str_bytes = string.encode(encoding='utf-8')
  5. print(type(str_bytes))
  6. m.update(str_bytes) # update方法只接收bytes类型数据作为参数
  7. str_md5 = m.hexdigest() # 得到散列后的字符串
  8. print('MD5散列前为 :' + string)
  9. print('MD5散列后为 :' + str_md5)

在计算md5值的过程中,有一步要使用update方法,该方法只接受bytes类型数据。

  • 二进制读写文件
  1. f = open('data', 'wb')
  2. text = '二进制写文件'
  3. text_bytes = text.encode('utf-8')
  4. f.write(text_bytes)
  5. f.close()
  6. f = open('data', 'rb')
  7. data = f.read()
  8. print(data, type(data))
  9. str_data = data.decode('utf-8')
  10. print(str_data)
  11. f.close()

使用二进制方式读写文件时,均要用到bytes类型,二进制写文件时,write方法只接受bytes类型数据,因此需要先将字符串转成bytes类型数据;读取二进制文件时,read方法返回的是bytes类型数据,使用decode方法可将bytes类型转成字符串。

  • socket编程
  1. import socket
  2. url = 'www.zhangdongshengtech.com'
  3. port = 80
  4. # 创建TCP socket
  5. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  6. # 连接服务端
  7. sock.connect((url, port))
  8. # 创建请求消息头
  9. request_url = 'GET /article-types/6/ HTTP/1.1\r\nHost: www.zhangdongshengtech.com\r\nConnection: close\r\n\r\n'
  10. print(request_url)
  11. # 发送请求
  12. sock.send(request_url.encode())
  13. response = b''
  14. # 接收返回的数据
  15. rec = sock.recv(1024)
  16. while rec:
  17. response += rec
  18. rec = sock.recv(1024)
  19. print(response.decode())
  20. print(type(response))

使用socket时,不论是发送还是接收数据,都需要使用bytes类型数据。

字符串型和bytes型的相互转换

将字符串转成bytes类型数据需要使用encode方法,将bytes类型数据转换成字符串,需要使用decode方法,转换方法可以指定编码

  1. string = "爱我中华"
  2. bstr = string.encode(encoding='utf-8')
  3. print(bstr, type(bstr))
  4. string = bstr.decode(encoding='utf-8')
  5. print(string, type(string))