Как можно вырезать \ x00 байт из текстового документа - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть входной поток от устройства, и я хочу отфильтровать байты '\ x00'.Эти пустые байты появляются только при печати переменной.Например, я хочу отфильтровать \ x00 из следующей переменной.

example = b'\n\x00[\x007\x000\x004\x005\x001\x009\x004\x009\x000\x006\x008\x004\x002\x00]\x00 \x00-\x00 \x00D\x00S\x00I\x00 \x00-\x00 \x00R\x00e\x00s\x00p\x00o\x00n\x00s\x00e\x00'

Любая помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Вы можете просто попытаться использовать replace() следующим образом:

print(example.replace(b'\0', b''))

Это отобразит:

b'\n[7045194906842] - DSI - Response'

Текст может быть в формате utf-16, поэтому следующий код будет преобразовывать егов строку:

print(example.decode('utf-16'))
0 голосов
/ 26 сентября 2018

Вы можете использовать filter с фильтром None (удаляет ложные элементы) и принудительно восстанавливать объект bytes:

example = b'\n\x00[\x007\x000\x004\x005\x001\x009\x004\x009\x000\x006\x008\x004\x002\x00]\x00 \x00-\x00 \x00D\x00S\x00I\x00 \x00-\x00 \x00R\x00e\x00s\x00p\x00o\x00n\x00s\x00e\x00'
result = bytes(filter(None,example))

результат

b'\n[7045194906842] - DSI - Response'

(общий ответ result = bytes(x for x in example if x != character_code), в этом случае мы обычно не используем filter, потому что для этого потребуется lambda)

...