我有 10GB 的小端格式二进制文件数据,我正在将它们转换为整数,例如:
with open(myfile, 'rb') as inh:
data = inh.read()
for i in range(0, len(data), 4):
pos = struct.unpack('i', data[i:i+4])
但是转换每个包含 100MB 数据的文件需要很长时间。有什么办法可以加快这个过程吗?
最佳答案
如果你不介意使用numpy,你可以使用numpy.memmap
:
import numpy as np
data = np.memmap('foo.bin', dtype='<i4', mode='r')
例如,
In [122]: !hexdump foo.bin
0000000 01 00 00 00 02 00 00 00 03 00 00 00 ff 00 00 00
0000010 00 01 00 00 01 01 00 00 ff ff ff ff fe ff ff ff
0000020
In [123]: data = np.memmap('foo.bin', dtype='<i4', mode='r')
In [124]: data
Out[124]: memmap([ 1, 2, 3, 255, 256, 257, -1, -2], dtype=int32)
In [125]: data[6]
Out[125]: -1
可能没有必要对数据进行内存映射,在这种情况下,您只需使用 numpy.fromfile
将其读入数组即可。 .例如,
In [129]: data = np.fromfile('foo.bin', dtype='<i4')
In [130]: data
Out[130]: array([ 1, 2, 3, 255, 256, 257, -1, -2], dtype=int32)
关于python - 将十六进制字符串文件转换为整数的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33024924/