bytes 字节串
bytes类型是python3新增的一种数据类型,用来代表字节串。字符串由多个字符串构成,以字符为单位进行操作,字节串由多个字节构成,以字节为单位进行操作。他们除了操作单元不同,其他的用法基本相同,bytes类型数据也是不可变对象。
1. bytes类型数据的应用场景
bytes类型存储原始的二进制格式数据,下面列举它的几个常用场景
1.1 计算md5
import hashlib
string = "123456"
m = hashlib.md5() str_bytes = string.encode(encoding='utf-8') print(type(str_bytes)) m.update(str_bytes) str_md5 = m.hexdigest()
print('MD5散列前为 :' + string) print('MD5散列后为 :' + str_md5)
|
在计算md5值的过程中,有一步要使用update方法,该方法只接受bytes类型数据。
1.2 二进制读写文件
f = open('data', 'wb') text = '二进制写文件' text_bytes = text.encode('utf-8') f.write(text_bytes) f.close()
f = open('data', 'rb') data = f.read() print(data, type(data)) str_data = data.decode('utf-8') print(str_data) f.close()
|
使用二进制方式读写文件时,均要用到bytes类型,二进制写文件时,write方法只接受bytes类型数据,因此需要先将字符串转成bytes类型数据;读取二进制文件时,read方法返回的是bytes类型数据,使用decode方法可将bytes类型转成字符串。
1.3 socket编程
import socket
url = 'www.zhangdongshengtech.com' port = 80
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((url, port))
request_url = 'GET /article-types/6/ HTTP/1.1\r\nHost: www.zhangdongshengtech.com\r\nConnection: close\r\n\r\n' print(request_url)
sock.send(request_url.encode()) response = b''
rec = sock.recv(1024) while rec: response += rec rec = sock.recv(1024)
print(response.decode()) print(type(response))
|
使用socket时,不论是发送还是接收数据,都需要使用bytes类型数据。
2. 字符串与bytes类型数据转换
将字符串转成bytes类型数据需要使用encode方法,将bytes类型数据转换成字符串,需要使用decode方法,转换方法可以指定编码
string = "爱我中华" bstr = string.encode(encoding='utf-8') print(bstr, type(bstr))
string = bstr.decode(encoding='utf-8') print(string, type(string))
|