内存映射通常可以提高I/O的性能,因为使用内存映射时,不需要对每个访问都建立一个单独的系统调用,也不需要在缓冲区之间复制数据,内核和用户都能很方便的直接访问内存。
本篇,将详细介绍Python内存映射库:mmap。
使用mmap()函数可以创建一个内存映射文件。该函数的第1个参数是一个文件描述符,可以通过file对象的fileno()函数获取;第2个参数是要映射的文件部分大小(单位字节),如果该值为0,映射整个文件,如果该参数大于文件大小,则扩展该文件。
示例如下:
import mmapwithopen('英文文档.txt','r')as f:with mmap.mmap(f.fileno(),0,access=mmap.ACCESS_READ)as m:print(m.read(10))print(m.read(10))print(m[:-10])
运行之后,效果如下:
这里读写会根据文件指针进行移动,比如开始读10个字符,那么第2次读就会接着11个字符开始在读,不会返回起点,而通过切片或者seek()函数可以将指针重置。
至于access参数,表示以什么方式访问,这里以读的方式。
需要特别注意的是,windows不支持创建长度为0的映射。
写文件比较简单,这里我们直接看一段代码:
import mmap word= b'The'withopen('英文文档.txt','r+')as f:with mmap.mmap(f.fileno(),0, access=mmap.ACCESS_WRITE)as m: loc= m.find(word) m[loc:loc+len(word)]= b'lyj'print(m.read())
运行之后,首字母The,就被我们替换成"lyj"了,效果如下:
当然,这里除了切片写入之外,也可以使用write()等文件操作方法进行操作,与文件操作一样。需要注意的是假如access等于ACCESS_COPY,那么不会把修改的内容写入磁盘上的文件。
热门文章
- 「2月1日」最高速度21M/S,2025年Shadowrocket/V2ray/SSR/Clash每天更新免费节点订阅链接
- 宠物领养平台论文 宠物领养平台论文答辩怎么写
- 国外动物疫苗公司(国外动物疫苗公司排行榜)
- 免费领养猫平台下载(免费领养猫平台下载什么软件)
- 上海宠物中心领养地址在哪(上海宠物领养中心免费领养狗狗)
- 狗粮批发价在哪里找(狗粮哪里有卖)
- pycharm中新增less
- 宠物粮食生意怎么样啊好做吗赚钱吗(宠物粮食生意怎么样啊好做吗赚钱吗知乎)
- 狗粮有哪些知名品牌的(狗粮排名前十品牌大全)
- 「2月12日」最高速度20.8M/S,2025年SSR/V2ray/Shadowrocket/Clash每天更新免费节点订阅链接