纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

Python 内存映射文件操作 Python使用mmap实现内存映射文件操作

一天一篇Python库   2021-06-07 我要评论
想了解Python使用mmap实现内存映射文件操作的相关内容吗一天一篇Python库在本文为您仔细讲解Python 内存映射文件操作的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Python,内存映射文件操作,Python,内存映射下面大家一起来学习吧

前言

内存映射通常可以提高I/O的性能因为使用内存映射时不需要对每个访问都建立一个单独的系统调用也不需要在缓冲区之间复制数据内核和用户都能很方便的直接访问内存

说明

 1)什么叫映射?

   ==>就是给一个对象(可以是变量、物理等)起一个唯一的别名建立一一对应的关系

 2)文件映射:将磁盘上的文件的位置与进程逻辑地址空间中一块大小相同的区域之间的一一对应

 3)映射后得到一个类似数组类型的东西(mmap.mmap()对象)可以通过类似操作数组的方式达到对文件内容更改的目的

优点

 1)相对于二进制文件的缺陷
  通常读写文件时使用read()和write()方法这两种方法都是以流的形式进行的也就是一个字节接着一个字节的读写如果想从某一位置开始读写使用seek()方法调整文件指针此方法对二进制文件的操作非常不方便因为相对于二进制文件数据写入文件时是以数组的形式将数据映射到文件内然后就以访问数组的形式访问文件而且在对文件进行修改后能再次通过此数组将数据同步到文件中

 2)某些嵌入式设备寄存器被编址到内存地址空间我们可以映射/dev/mem某范围取访问这些寄存器
  例如:在树莓派(为学习计算机编程教育设计的一种微型电脑)上有一个pwm波形的发生器若想使用此发生器就要访问树莓派的寄存器实际上寄存器就是物理地址的某一特定空间此时如果要访问寄存器需要将 /dev/mem 的某一范围映射到内存中用访问内存的方式来访问寄存器

 3)如果多个进程映射同一个文件还能实现进程通信的目的
  多个进程把同一个文件映射到各自的内存空间当中实际上它们看到的是同一个视图也能实现进程通信的目的 

本篇将详细介绍Python内存映射库:mmap

mmap(读文件)

使用mmap()函数可以创建一个内存映射文件该函数的第1个参数是一个文件描述符可以通过file对象的fileno()函数获取第2个参数是要映射的文件部分大小(单位字节)如果该值为0映射整个文件如果该参数大于文件大小则扩展该文件

示例如下:

import mmap

with open('英文文档.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的映射

write(写文件)

写文件比较简单这里我们直接看一段代码:

import mmap

word = b'The'

with open('英文文档.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那么不会把修改的内容写入磁盘上的文件


相关文章

猜您喜欢

  • goland调试远程代码 使用goland调试远程代码的操作步骤

    想了解使用goland调试远程代码的操作步骤的相关内容吗janbar在本文为您仔细讲解goland调试远程代码的相关知识和一些Code实例欢迎阅读和指正我们先划重点:goland调试远程,goland远程代码下面大家一起来学习吧..
  • Netty编解码器 详解Netty编码器和解码器

    想了解详解Netty编码器和解码器的相关内容吗_tommy在本文为您仔细讲解Netty编解码器的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Netty编码器,Netty解码器,Java,Netty下面大家一起来学习吧..

网友评论

Copyright 2020 www.fresh-weather.com 【世纪下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式