从字节数组中过滤值
filtering values from bytearray
我有一个字节数组列表,其中一些项目是:
bytearray(b'0.266 : 2\x00\xc9\n\xa0\x01\x00\x00p\x99\xcd\x88')
bytearray(b'0.264 : 3\x00\xc9\n\xa0\x01\x00\x000.12')
bytearray(b'0.263 : 4\x00\xdc\n\xa0\x01\x00\x000.25')
bytearray(b'0.255 : 5\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00')
bytearray(b'0.266 : 6\x00\xce\n\xa0\x01\x00\x000.13')
bytearray(b'0.263 : 7\x00\xd6\n\xa0\x01\x00\x00\xe0\x98]\n')
bytearray(b'0.273 : 8\x00\x00\x00\x00\x00\x00\x00\xa0\x9d]\n')
bytearray(b'0.269 : 9\x00\x00\x00\x00\x00\x00\x00\x10\x9d]\n')
bytearray(b'0.272 : 10\x00\x00\x00\x00\x00\x00\x10\x9f]\n')
bytearray(b'0.275 : 11\x00\x00\x00\x00\x00\x00@\x9d]\n')
bytearray(b'0.272 : 12\x00\x00\x00\x00\x00\x00\xd0\x9e]\n')
bytearray(b'0.274 : 13\x00\x00\x00\x00\x00\x000.26')
bytearray(b'0.278 : 14\x00\x00\x00\x00\x00\x00 \x9d]\n')
bytearray(b'0.272 : 15\x00\x00\x00\x00\x00\x000\x9f]\n')
bytearray(b'0.27 : 16\x00\x00\x00\x00\x00\x00\x00 \x9d]\n')
bytearray(b'0.276 : 17\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00')
bytearray(b'0.272 : 18\x00\x00\x00\x00\x00\x00`\x9f]\n')
bytearray(b'0.277 : 19\x00\x00\x00\x00\x00\x00Pz\xb1\n')
我想过滤掉起始值,即 0.277 : 19
,最好是元组的形式。我尝试解码 usign b.decode()
但收到以下错误:
'utf-8' codec can't decode byte 0xf0 in position 8: invalid continuation byte
需要注意的重要一点是,有时浮点数有 2 位小数,但最多有 3 位。有没有一种简单的方法可以以元组的形式获取该信息?
arrays = [
bytearray(b'0.266 : 2\x00\xc9\n\xa0\x01\x00\x00p\x99\xcd\x88'),
bytearray(b'0.264 : 3\x00\xc9\n\xa0\x01\x00\x000.12'),
bytearray(b'0.263 : 4\x00\xdc\n\xa0\x01\x00\x000.25'),
bytearray(b'0.255 : 5\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00'),
bytearray(b'0.266 : 6\x00\xce\n\xa0\x01\x00\x000.13'),
bytearray(b'0.263 : 7\x00\xd6\n\xa0\x01\x00\x00\xe0\x98]\n'),
bytearray(b'0.273 : 8\x00\x00\x00\x00\x00\x00\x00\xa0\x9d]\n'),
bytearray(b'0.269 : 9\x00\x00\x00\x00\x00\x00\x00\x10\x9d]\n'),
bytearray(b'0.272 : 10\x00\x00\x00\x00\x00\x00\x10\x9f]\n'),
bytearray(b'0.275 : 11\x00\x00\x00\x00\x00\x00@\x9d]\n'),
bytearray(b'0.272 : 12\x00\x00\x00\x00\x00\x00\xd0\x9e]\n'),
bytearray(b'0.274 : 13\x00\x00\x00\x00\x00\x000.26'),
bytearray(b'0.278 : 14\x00\x00\x00\x00\x00\x00 \x9d]\n'),
bytearray(b'0.272 : 15\x00\x00\x00\x00\x00\x000\x9f]\n'),
bytearray(b'0.27 : 16\x00\x00\x00\x00\x00\x00\x00 \x9d]\n'),
bytearray(b'0.276 : 17\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00'),
bytearray(b'0.272 : 18\x00\x00\x00\x00\x00\x00`\x9f]\n'),
bytearray(b'0.277 : 19\x00\x00\x00\x00\x00\x00Pz\xb1\n'),
]
print(len(arrays)) # 18
pattern_to_exclude = b'0.277 : 19'
filtered_arrays = list(filter(lambda bytes: bytes[0:len(pattern_to_exclude)] != pattern_to_exclude, arrays))
print(len(filtered_arrays)) # 17
print(filtered_arrays[-1][0:10]) # bytearray(b'0.272 : 18')
只是检查字节数组的开头是否与模式不匹配。我使用了 filter
但同样可以通过常规循环完成。
最后的打印显示最后一个字节数组已不存在,因为它是唯一与模式匹配的字节数组。
我有一个字节数组列表,其中一些项目是:
bytearray(b'0.266 : 2\x00\xc9\n\xa0\x01\x00\x00p\x99\xcd\x88')
bytearray(b'0.264 : 3\x00\xc9\n\xa0\x01\x00\x000.12')
bytearray(b'0.263 : 4\x00\xdc\n\xa0\x01\x00\x000.25')
bytearray(b'0.255 : 5\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00')
bytearray(b'0.266 : 6\x00\xce\n\xa0\x01\x00\x000.13')
bytearray(b'0.263 : 7\x00\xd6\n\xa0\x01\x00\x00\xe0\x98]\n')
bytearray(b'0.273 : 8\x00\x00\x00\x00\x00\x00\x00\xa0\x9d]\n')
bytearray(b'0.269 : 9\x00\x00\x00\x00\x00\x00\x00\x10\x9d]\n')
bytearray(b'0.272 : 10\x00\x00\x00\x00\x00\x00\x10\x9f]\n')
bytearray(b'0.275 : 11\x00\x00\x00\x00\x00\x00@\x9d]\n')
bytearray(b'0.272 : 12\x00\x00\x00\x00\x00\x00\xd0\x9e]\n')
bytearray(b'0.274 : 13\x00\x00\x00\x00\x00\x000.26')
bytearray(b'0.278 : 14\x00\x00\x00\x00\x00\x00 \x9d]\n')
bytearray(b'0.272 : 15\x00\x00\x00\x00\x00\x000\x9f]\n')
bytearray(b'0.27 : 16\x00\x00\x00\x00\x00\x00\x00 \x9d]\n')
bytearray(b'0.276 : 17\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00')
bytearray(b'0.272 : 18\x00\x00\x00\x00\x00\x00`\x9f]\n')
bytearray(b'0.277 : 19\x00\x00\x00\x00\x00\x00Pz\xb1\n')
我想过滤掉起始值,即 0.277 : 19
,最好是元组的形式。我尝试解码 usign b.decode()
但收到以下错误:
'utf-8' codec can't decode byte 0xf0 in position 8: invalid continuation byte
需要注意的重要一点是,有时浮点数有 2 位小数,但最多有 3 位。有没有一种简单的方法可以以元组的形式获取该信息?
arrays = [
bytearray(b'0.266 : 2\x00\xc9\n\xa0\x01\x00\x00p\x99\xcd\x88'),
bytearray(b'0.264 : 3\x00\xc9\n\xa0\x01\x00\x000.12'),
bytearray(b'0.263 : 4\x00\xdc\n\xa0\x01\x00\x000.25'),
bytearray(b'0.255 : 5\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00'),
bytearray(b'0.266 : 6\x00\xce\n\xa0\x01\x00\x000.13'),
bytearray(b'0.263 : 7\x00\xd6\n\xa0\x01\x00\x00\xe0\x98]\n'),
bytearray(b'0.273 : 8\x00\x00\x00\x00\x00\x00\x00\xa0\x9d]\n'),
bytearray(b'0.269 : 9\x00\x00\x00\x00\x00\x00\x00\x10\x9d]\n'),
bytearray(b'0.272 : 10\x00\x00\x00\x00\x00\x00\x10\x9f]\n'),
bytearray(b'0.275 : 11\x00\x00\x00\x00\x00\x00@\x9d]\n'),
bytearray(b'0.272 : 12\x00\x00\x00\x00\x00\x00\xd0\x9e]\n'),
bytearray(b'0.274 : 13\x00\x00\x00\x00\x00\x000.26'),
bytearray(b'0.278 : 14\x00\x00\x00\x00\x00\x00 \x9d]\n'),
bytearray(b'0.272 : 15\x00\x00\x00\x00\x00\x000\x9f]\n'),
bytearray(b'0.27 : 16\x00\x00\x00\x00\x00\x00\x00 \x9d]\n'),
bytearray(b'0.276 : 17\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00'),
bytearray(b'0.272 : 18\x00\x00\x00\x00\x00\x00`\x9f]\n'),
bytearray(b'0.277 : 19\x00\x00\x00\x00\x00\x00Pz\xb1\n'),
]
print(len(arrays)) # 18
pattern_to_exclude = b'0.277 : 19'
filtered_arrays = list(filter(lambda bytes: bytes[0:len(pattern_to_exclude)] != pattern_to_exclude, arrays))
print(len(filtered_arrays)) # 17
print(filtered_arrays[-1][0:10]) # bytearray(b'0.272 : 18')
只是检查字节数组的开头是否与模式不匹配。我使用了 filter
但同样可以通过常规循环完成。
最后的打印显示最后一个字节数组已不存在,因为它是唯一与模式匹配的字节数组。