簡體   English   中英

從 bytearray 過濾值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM