[英]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
,理想情況下以元組的形式。 我嘗試解碼b.decode()
但收到以下錯誤:
“utf-8”編解碼器無法解碼 position 8 中的字節 0xf0:無效的繼續字節
需要注意的重要一點是,有時浮點數有 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
,但同樣可以使用常規循環來完成。
最后的打印顯示最后一個字節數組不再存在,因為它是唯一匹配模式的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.