我怎么能一次struct.unpack很多数字

时间:2011-12-11 03:38:17

标签: python struct

我想将一堆打包的整数放入文件中,例如:

for i in int_list:
    fp.write(struct.pack('<I', i))

现在我想将它们读入int_list。我可以这样做,但效率似乎很低:

data = fp.read()
int_list = []
for i in xrange(0, len(data), 4):
    int_list.append(struct.unpack('<I', data[i:i+4])[0])

有更有效的方法吗?

2 个答案:

答案 0 :(得分:23)

您可以在两个方向上更有效地完成这项工作:

>>> import struct

>>> int_list = [0, 1, 258, 32768]
>>> fmt = "<%dI" % len(int_list)
>>> data = struct.pack(fmt, *int_list)
>>> data
'\x00\x00\x00\x00\x01\x00\x00\x00\x02\x01\x00\x00\x00\x80\x00\x00'

>>> # f.write(data)
... # data = f.read()
...

>>> fmt = "<%dI" % (len(data) // 4)
>>> new_list = list(struct.unpack(fmt, data))
>>> new_list
[0, 1, 258, 32768]

答案 1 :(得分:5)

array.array应该很快。您可以指定它包含的元素类型 - 有一些用于整数(尽管仅在机器字节序中使用IIUC),然后使用其fromfile方法直接从文件中读取。