如何使用python

时间:2016-07-18 21:20:11

标签: python object struct byte

我正在尝试从编码文件中解压缩特定数据。数据类型为int32。

我的方法是尝试读取文件的每一行,如果该行的一部分大小与'

with open(r2sFile2, encoding="latin-1") as datafile:
    for line in datafile:
        for i in range(0, len(line)):
            text = line.encode('latin-1')


            fmt = text[0: i+1]
            print(sys.getsizeof(fmt))
            if (sys.getsizeof(fmt) == 4):
                 PacketSize  = struct.unpack('<I', fmt)
                 if PacketSize == 'BTH0':
                     print("Identifier Found")

到目前为止,我遇到了一个问题,第一个是sys.getsizeof(fmt)[读取线段的大小]返回的值始终高于所需的大小[4]。也许我必须将每个字节对象转换为int32(如果可能的话)?

1 个答案:

答案 0 :(得分:0)

您无法使用编码打开文件,也无法从同一个流中读取原始字节。指定编码会将这些字节转换为unicode点。您希望以二进制模式打开文件,以便它返回byte而不是unicode个字符。您还应该从文件中读取固定大小的数据块,而不是逐行读取,这在二进制模式下确实没有意义

with open('/path/to/file.dat', 'rb') as f:
    val = struct.unpack('<I', f.read(4))
    if val == 123:
        ...

此外,&#39; BTH0&#39;不是无符号整数,所以它永远不会与二进制文件中解压缩的值相等,格式为字符串<I,它始终是无符号整数。