我在获取二进制文件中的数据时遇到了这个问题# Write data
f = open(path, 'wb')
start_date = [2014, 1, 1, 0, 0, 0, 0]
end_date = [2014, 2, 1, 0, 0, 0, 0]
for x in range(10):
f.write(struct.pack('B', 0))
f.write(struct.pack('I', x))
f.write(struct.pack('HBBBBBH', *start_date_binary))
f.write(struct.pack('HBBBBBH', *end_date_binary))
f.close()
# Read data
f = open(path, 'rb')
for x in range(10):
data_structure = struct.unpack_from("BIHBBBBBHHBBBBBH",
f.read(FILE_INDEX_STRUCTURE))
print(data_structure)
f.close()
输出是
^{pr2}$
预期产出是(0, 0, 2014, 1, 1, 0, 0, 0, 0, 2014, 2, 1, 0, 0, 0, 0)
(0, 1, 2014, 1, 1, 0, 0, 0, 0, 2014, 2, 1, 0, 0, 0, 0)
(0, 2, 2014, 1, 1, 0, 0, 0, 0, 2014, 2, 1, 0, 0, 0, 0)
(0, 3, 2014, 1, 1, 0, 0, 0, 0, 2014, 2, 1, 0, 0, 0, 0)
(0, 4, 2014, 1, 1, 0, 0, 0, 0, 2014, 2, 1, 0, 0, 0, 0)
(0, 5, 2014, 1, 1, 0, 0, 0, 0, 2014, 2, 1, 0, 0, 0, 0)
(0, 6, 2014, 1, 1, 0, 0, 0, 0, 2014, 2, 1, 0, 0, 0, 0)
(0, 7, 2014, 1, 1, 0, 0, 0, 0, 2014, 2, 1, 0, 0, 0, 0)
(0, 8, 2014, 1, 1, 0, 0, 0, 0, 2014, 2, 1, 0, 0, 0, 0)
(0, 9, 2014, 1, 1, 0, 0, 0, 0, 2014, 2, 1, 0, 0, 0, 0)
编辑
正在获取项的结构类型,其中'B'为1,'H'为2。在同一个unpack函数中使用这些类型,这些类型会混淆,在示例中,'BH'是3,但返回4。在>>> struct.unpack_from("B", '')
...
struct.error: unpack_from requires a buffer of at least 1 bytes
>>> struct.unpack_from("H", '')
...
struct.error: unpack_from requires a buffer of at least 2 bytes
>>> struct.unpack_from("BH", '')
...
struct.error: unpack_from requires a buffer of at least 4 bytes