擅长:python、mysql、java
<p>我将看到mmaping文件,然后使用来自\u buffer()调用的ctypes类方法。
这将映射ctypes定义的结构数组<a href="http://docs.python.org/library/ctypes#ctypes-arrays" rel="nofollow">http://docs.python.org/library/ctypes#ctypes-arrays</a>。在</p>
<p>这将结构映射到mmap文件上,而不必显式地读取/转换和复制内容。在</p>
<p>我不知道最终结果是否合适。在</p>
<p>这里是一个使用mmap的简单示例。(我用dd<code>dd if=/dev/zero of=./test.dat bs=96 count=10240</code>创建了一个文件</p>
<pre><code>from ctypes import Structure
from ctypes import c_char, c_long, c_double
import mmap
import timeit
class StructFMT(Structure):
_fields_ = [('ch',c_char * 64),('lo',c_long *2),('db',c_double * 3)]
d_array = StructFMT * 1024
def doit():
f = open('test.dat','r+b')
m = mmap.mmap(f.fileno(),0)
data = d_array.from_buffer(m)
for i in data:
i.ch, i.lo[0]*10 ,i.db[2]*1.0 # just access each row and bit of the struct and do something, with the data.
m.close()
f.close()
if __name__ == '__main__':
from timeit import Timer
t = Timer("doit()", "from __main__ import doit")
print t.timeit(number=10)
</code></pre>