我有大约数十GB的文件,这些文件由10个左右的打包C结构组成。我需要能够遍历文件中的每个结构进行分析,并希望能够在python代码中进行此分析。我根本不需要写文件。
我不认为numpy可以在这里提供帮助,因为这些文件不仅仅是一个重复的结构。我觉得struct.unpack太慢了。
到目前为止,我的想法是使用Cython和mmap文件,然后迭代并将缓冲区转换为Cython C结构,以避免任何不必要的复制。我尝试使用这种方法的障碍是,我不能直接使用Cython C结构指针,需要有效地编写python包装类,这使得编写起来有点慢和乏味。有人知道解决这个问题吗?
想知道是否有其他方法可行?我还没有考虑过ctypes。
答案 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
可以让你的速度更快。