如何一次解包多个数字
我想把一堆打包好的整数放进一个文件里,比如:
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 个回答
27
你可以在两个方向上都更有效率地做到这一点:
>>> 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]
5
array.array
这个东西在处理这个问题时应该会很快。你可以指定它里面包含的元素类型——对于整数来说,有几种选择(不过如果我没理解错的话,只有在机器的字节序下可以使用),然后你可以用它的 fromfile
方法直接从文件中读取数据。