内存文件映射,这东西听起来很高大上,其实呢,很简单,就是把一个文件映射到内存中,你可以认为,映射后,文件在内存中,访问速度是极快的。windows 64位环境下,最大可以映射4G的文件。说是映射,并不是真的把文件都放入到内存中,否则就不要叫映射了,而是叫加载。我们访问的时候,访问到哪里,哪里的数据就被映射到内存中,所以不会占用太多的内存,却有着内存级别的访问速度
python的 mmap模块提供了操作内存文件映射的各种能力。
直接看代码吧
#coding=utf-8
'''
Created on 2016-3-6
@author: kwsy
'''
import mmap
import os
import struct
def memory_map(filename,access=mmap.ACCESS_WRITE):
size = os.path.getsize(filename)
fd = os.open(filename,os.O_RDWR)
return mmap.mmap(fd,size,access=access)
def init_file(filename,size):
#最大2的32次方减1
with open(filename,'wb') as f:
f.seek(size-1)
f.write(b'\x00')
def write():
filename = 'data'
init_file(filename,100)
m = memory_map('data')
text = '很好'
s = struct.pack('ii6s',3,5,text)
print type(s)
m[:len(s)] = s
print len(s)
m.close()
def read():
m = memory_map('data')
str = m[0:14]
a1,a2,text=struct.unpack('ii6s',str)
print len(text)
print a1,a2,text
if __name__ == '__main__':
write()
read()
咱们先创建一个100byte大小的文件,然后呢,向里面写入二进制数据,我们可以像操作字符串那样来操作m,它提供了各种切片操作,而且对其直接赋值就相当于写文件了。