一、bytes是什么?
Python中的bytes是一种不可变的二进制类型。与字符串类型不同,它是由0到255之间的整数构成的序列。bytes通过b前缀表示。在Python 2中,还有一个类似的数据类型称为字符串。
bytes类型在处理二进制数据,如图片和视频文件,以及与外部系统进行网络通信时非常有用。
b = b'Hello World'
print(b)
二、bytes的常规操作
bytes类型可以执行大多数和字符串相关的操作,例如索引、切片和拼接。但是需要注意的是,这些操作返回的都是新的bytes对象,而不是原始bytes对象。
1. 索引和切片
b = b'Hello World'
print(b[0]) # 72
print(b[2:5]) # b'llo'
2. 拼接
使用加号(+)进行拼接,但是需要注意的是两个bytes对象之间才能拼接。如果想将字符串与bytes对象拼接在一起,需要使用encode()方法将字符串转换为bytes对象。
b1 = b'Hello'
b2 = b'World'
b3 = b1 + b2
print(b3) # b'HelloWorld'
s = '!'
b4 = b3 + s.encode()
print(b4) # b'HelloWorld!'
三、bytes的常规方法
1. find()
在bytes中查找子串并返回其位置。如果存在多个匹配项,则返回第一个。如果找不到,则返回-1。
b = b'Hello World'
pos = b.find(b'World')
print(pos) # 6
2. replace()
用另一个bytes对象替换指定的子串,并返回新的bytes对象。如果找不到任何匹配项,则返回原始bytes对象。
b = b'Hello World'
new_b = b.replace(b'Hello', b'Hi')
print(new_b) # b'Hi World'
3. split()
返回一个由子串分割的bytes对象列表。如果未指定分隔符,则默认以空格分割。
b = b'Hello World'
b_list = b.split()
print(b_list) # [b'Hello', b'World']
四、bytes与文件处理
bytes类型与文件处理密切相关。在读取文件时,以二进制模式打开文件并使用read()方法读取它。在写入文件时,将二进制数据写入文件。
1. 读取文件
在读取文件时,以二进制模式打开文件并使用read()方法即可。
with open('example.txt', 'rb') as f:
b = f.read()
print(b) # b'Hello World'
2. 写入文件
在写入文件时,需要以二进制模式打开文件并使用write()方法,将二进制数据写入文件。
b = b'Hello World'
with open('example.txt', 'wb') as f:
f.write(b)
五、bytes与网络编程
bytes类型在网络编程中非常重要。在与外部系统通信时,需要将数据以二进制格式发送和接收。常见的例子包括HTTP请求、SMTP协议等。
在socket编程中,通常使用bytes对象表示消息。客户端和服务器之间交换的任何消息都是bytes对象。例如,发送一个包含“Hello World”的消息:
import socket
HOST = 'localhost'
PORT = 1337
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
message = b'Hello World'
s.sendall(message)
data = s.recv(1024)
print('Received', repr(data))
六、bytes与数据加密
由于bytes类型是不可变的,因此非常适合用于数据加密。例如,在Python中使用HMAC(散列消息身份验证代码)时,输入可以是bytes类型。
import hmac
import hashlib
key = b'secret_key'
msg = b'Hello World'
h = hmac.new(key, msg, hashlib.sha256)
print(h.hexdigest()) # 6f1488db8abae9b2f8cfcf152d529272d0fa94720020d725dc628d5a5e033e8c
原创文章,作者:KUPXF,如若转载,请注明出处:https://www.506064.com/n/370636.html