python - 将十六进制字符串文件转换为整数的最佳方法

标签 python python-2.7 cython binaryfiles

我有 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/

相关文章:

python - 如何使用selenium让chrome浏览器在后台运行

python - 如何将 Keras 中的多个输入的标签赋予 model.fit() 函数?

python-2.7 - 使用OpenCV在实时Feed上进行霍夫变换

python - Python 中的 USB 内存棒序列号

cython - Cython 中 dealloc 中的 Python 对象

python - 如何将c类型和python类型组合成一个结构体?

python - 如何使用 cython 编译扩展?

python - 检查图像中太薄的区域

python - 谷歌应用引擎如何正确部署应用程序

python - 使用 python (openpyxl) 从 excel 中删除网格线