Python中如何处理字节(byte)相关的问题
[b"['2018-10-11 08:16:00', 6498, 6525, 6497.5, 6503.5, 1539216960000]", b"['2018-10-11 08:17:00', 6503.5, 6523.5, 6497.5, 6514.5, 1539217020000]", b"['2018-10-11 08:18:00', 6514.5, 6515, 6490.5, 6492, 1539217080000]", b"['2018-10-11 08:19:00', 6492, 6495, 6490, 6490, 1539217140000]",]
我从 redis 取出的数据是这样 要怎么将他转换为嵌套列表呢,这个 b 要怎么去掉呢
Python中如何处理字节(byte)相关的问题
b 说明是二进制串。 转成 unicode 后, 按 json 解析。
在Python里处理字节(bytes)和字节数组(bytearray)是日常操作,尤其是在网络通信、文件I/O或者处理二进制协议的时候。核心就是记住bytes是不可变的,而bytearray是可变的。
最基础的创建方式就是用b''前缀或者bytes()构造函数。比如,data = b'hello'就创建了一个字节串。如果你想修改内容,那就得用bytearray:mutable_data = bytearray(b'hello'),然后你可以像列表一样修改它,比如mutable_data[0] = 104。
编码和解码是字节和字符串之间转换的关键。用.decode()方法把字节变成字符串(比如b'hello'.decode('utf-8')得到’hello’),用.encode()方法把字符串变成字节(比如'hello'.encode('utf-8')得到b'hello')。千万注意编码问题,乱用编码(比如用'utf-8'去解码非UTF-8字节)会抛出UnicodeDecodeError。
处理二进制数据时,struct模块是你的好帮手。它能按照指定的格式(比如'<I'表示小端无符号整数)打包(pack)和解包(unpack)数据。例如,struct.pack('<I', 12345)会得到一个4字节的字节串。
对于复杂的位操作,int类型的方法很实用。你可以用int.from_bytes()把字节序列转换成整数,用int.to_bytes()把整数转换成指定长度的字节序列。这在处理自定义协议头时特别有用。
文件读写方面,用二进制模式('rb'或'wb')打开文件,读写的就是字节对象。比如with open('file.bin', 'rb') as f: data = f.read()。
总结:根据需求在bytes、bytearray和字符串间转换,善用struct和int方法处理二进制。
[json.loads(i.decode().replace("’", ‘"’)) for i in a]
<br>>>> d = [b"['2018-10-11 08:16:00', 6498, 6525, 6497.5, 6503.5, 1539216960000]", b"['2018-10-11 08:17:00', 6503.5, 6523.5, 6497.5, 6514.5, 1539217020000]", b"['2018-10-11 08:18:00', 6514.5, 6515, 6490.5, 6492, 1539217080000]", b"['2018-10-11 08:19:00', 6492, 6495, 6490, 6490, 1539217140000]",]<br>>>> <br>>>> <br>>>> <br>>>> [s.decode() for s in d]<br>["['2018-10-11 08:16:00', 6498, 6525, 6497.5, 6503.5, 1539216960000]", "['2018-10-11 08:17:00', 6503.5, 6523.5, 6497.5, 6514.5, 1539217020000]", "['2018-10-11 08:18:00', 6514.5, 6515, 6490.5, 6492, 1539217080000]", "['2018-10-11 08:19:00', 6492, 6495, 6490, 6490, 1539217140000]"]<br>>>> <br>
redis 读数据库的时候有个参数是编码成字符串

