I am trying to remove a byte (\x00\x81
) from a byte string sByte
.
sByte = b'\x00\x81308 921 q53 246 133 137 022 1 0 1 1 1 130 C13 330 0000000199 04002201\n'
I am expecting to have as a result the following:
sByte = b'308 921 q53 246 133 137 022 1 0 1 1 1 130 C13 330 0000000199 04002201\n'
I have tried the following:
- I tried to decode
sByte
; after running the below line of code,
sByte.decode('utf-8')
I received a traceback: UnicodeDecodeError: 'utf-8' codec can't decode byte 0x81 in position 1: invalid start byte
.
- I also tried the following, but did not work:
sByte.replace('\x00\x81', '')
- I also found this: https://stackoverflow.com/a/38534992/10543310 but did not help removing
\x00\x81
.
I am not sure how we can remove or replace a byte in byte string.
CodePudding user response:
bytes.replace
doesn't work in-place, it returns a modified copy of the bytes
object. You can use sByte = sByte.replace(b'\x00\x81', b'')
(or bytes.removeprefix
if the bytes always occur at the start). Depending on your circumstances, you can also set the errors
parameter of the decode
method to 'ignore'
: sByte = sByte.decode(encoding='utf-8', errors='ignore')
.
CodePudding user response:
>>> sByte = b'\x00\x81308 921 q53 246 133 137 022 1 0 1 1 1 130 C13 330 0000000199 04002201\n'
>>> sByte[2:]
b'308 921 q53 246 133 137 022 1 0 1 1 1 130 C13 330 0000000199 04002201\n'
See also https://appdividend.com/2022/07/09/python-slice-notation/
The code snippet returns sByte
from and including the third byte until the end.
If you wanted to store the variable again you could do this:
>>> sByte = b'\x00\x81308 921 q53 246 133 137 022 1 0 1 1 1 130 C13 330 0000000199 04002201\n'
>>> sByte = sByte[2:]
>>> sByte
b'308 921 q53 246 133 137 022 1 0 1 1 1 130 C13 330 0000000199 04002201\n'