从字符串中去除 \x00 和 \x02

Strip \x00 and \x02 from string

我正在读取二进制文件以获取其中包含的信息。我的目标是从文件中的特定位置和可变长度开始提取一些字符。 我阅读文件如下:

with open("raw_files/P1925aM", "rb") as binary_file:

binary_file.seek(436, 0)

some_information = binary_file.read(331)

some_information = some_information.decode('ascii').rstrip('\x00')

binary_file.close()

输出是一个变量(class 'bytes'),它包含如下内容:

“17627005 SWU1.1 \x00\x00\x00...”

到目前为止,我设法将字节变量解码为 ASCII 并使用以下方法剥离 '\x00:

some_information = some_information.decode('ascii').rstrip('\x00')

输出如下:17627005 SWU1.1,正是我想要的。

现在我有一个变量 (class 'str')。 例如,如果变量看起来像这样,我现在遇到的问题是:

“17627005 SWU1.1 \x02\x00\x00...”

some_information = some_information.decode('ascii').rstrip('\x02')

不起作用。输出保持“17627005 SWU1.1 \x02\x00\x00...”

任何提示我在这里做错了什么?

strip 系列函数仅从字符串的 end 处删除;您的 \x02 不是字符串中的最后一个字符。如果要从字符串右侧删除 \x00\x02 的任意组合,请将两者都传递给 rstrip:

some_information = some_information.decode('ascii').rstrip('\x00\x02')

您可以使用正则表达式匹配可打印字符:

import re
...
rawdata = some_information.decode('ascii')
result = re.match(r"[\x20-\x7E]+", rawdata).group()