在python中解析大型二进制文件的最快方法

时间:2015-01-28 14:33:18

标签: python parsing binary cython mmap

我有大约数十GB的文件,这些文件由10个左右的打包C结构组成。我需要能够遍历文件中的每个结构进行分析,并希望能够在python代码中进行此分析。我根本不需要写文件。

我不认为numpy可以在这里提供帮助,因为这些文件不仅仅是一个重复的结构。我觉得struct.unpack太慢了。

到目前为止,我的想法是使用Cython和mmap文件,然后迭代并将缓冲区转换为Cython C结构,以避免任何不必要的复制。我尝试使用这种方法的障碍是,我不能直接使用Cython C结构指针,需要有效地编写python包装类,这使得编写起来有点慢和乏味。有人知道解决这个问题吗?

想知道是否有其他方法可行?我还没有考虑过ctypes。

1 个答案:

答案 0 :(得分:0)

您确定复制实际上是问题吗?这样的事情对你来说已经太慢了?

st = struct.Struct('>QLB')  # whatever
while True:
    data = fp.read(st.size)
    if not data:
        break
    a, b, c = st.unpack(data)
    do_something_with(a, b, c)

如果是这样,也许使用mmap和struct.unpack_from可以让你的速度更快。