【发布时间】:2015-03-27 12:07:06
【问题描述】:
我有大约数十 GB 的文件,这些文件由 10 个左右的压缩 C 结构混合而成。我需要能够遍历文件中的每个结构进行分析,并希望能够在 python 代码中进行这种分析。我根本不需要写入文件。
我不认为 numpy 在这里可以提供帮助,因为文件不仅仅是一个重复的结构。我发现 struct.unpack 太慢了。
到目前为止,我的想法是使用 Cython 并 mmap 文件,然后迭代并将缓冲区转换为 Cython C 结构,希望避免任何不必要的复制。不过,我在使用这种方法时遇到的问题是我不能直接使用 Cython C 结构指针,并且需要有效地编写 python 包装类,这使得编写起来有点慢和乏味。有谁知道解决这个问题的方法吗?
想知道是否还有其他可行的方法?我还没有考虑ctypes。
【问题讨论】:
-
我实际上使用
struct.unpack处理大型二进制文件并且没有真正的速度问题。您是否尝试过使用PyPy?我认为,由于struct.unpack使用的是简单类型,它应该可以通过PyPy进行高度优化,因此它可能会为您提供所需的速度提升。 -
@septi 我的基本 Cython 实现需要 2 秒,而 CPython 中的 struct.unpack 需要 76 秒,pypy 需要 26 秒
标签: python parsing binary cython mmap