读取二进制文件并在python中使用匹配字符进行检查

2024-05-18 14:22:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从GPS接收器字节扫描数据文件(实际上这将是一个连续的流程,不想用脱机数据测试代码)。如果找到匹配项,则检查下2个字节的“长度”,然后获取下2个字节并向右移动2位(不是字节),等等。我以前没有处理二进制,因此陷入了一个简单的任务。我可以逐字节读取二进制文件,但找不到按所需模式匹配的方法(即D3)

with open("COM6_200417.ubx", "rb") as f:
byte = f.read(1)  # read 1-byte at a time
while byte != b"":
    # Do stuff with byte.
    byte = f.read(1)
    print(byte) 

输出文件为:

b'\x82'
b'\xc2'
b'\xe3'
b'\xb8'
b'\xe0'
b'\x00'
b'@'
b'\x13'
b'\x05'
b'!'
b'\xd3'
b'\x00'
b'\x13'

。。。。 如何检查该字节是否为=='\xd3'?(D3) 还想知道如何按位移位,因为我需要检查由6位组成的十进制值 (1字节和下一个字节的前2位)。考虑到,取2字节(8位),然后2位右移 获取6位。在python中可能吗?非常感谢您的任何改进/添加/更改

还有,我能把前面那个讨厌的b去掉吗?但如果忽略它不会影响,那么就没有问题了

提前谢谢


Tags: 文件read字节数据文件with二进制流程byte
1条回答
网友
1楼 · 发布于 2024-05-18 14:22:28

“该字节”前面用一个b“”表示,表示它是一个字节对象。要删除它,可以将其转换为int:

thatbyte = b'\xd3'
byteint = thatbyte[0]  # or
int.from_bytes(thatbyte, 'big')  # 'big' or 'little' endian, which results in the same when converting a single byte

要进行比较,您可以执行以下操作:

thatbyte == b'\xd3'

因此,将一个字节对象与另一个字节对象进行比较。 转变<&书信电报;运算符仅在int上工作

要将整数转换回字节(假设为[0..255]),可以使用:

bytes([byteint])   # note the extra brackets!

至于改进,我建议立即读取整个二进制文件:

with open("COM6_200417.ubx", "rb") as f:
    allbytes = f.read() # read all
    for val in allbytes:
        # Do stuff with val, val is int !!!
        print(bytes([val]))

相关问题 更多 >

    热门问题