python小点心--内存文件映射

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/KWSY2008/article/details/50821637

          内存文件映射,这东西听起来很高大上,其实呢,很简单,就是把一个文件映射到内存中,你可以认为,映射后,文件在内存中,访问速度是极快的。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,它提供了各种切片操作,而且对其直接赋值就相当于写文件了。

展开阅读全文

没有更多推荐了,返回首页