iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python使用mmap如何实现内存映射文件操作
  • 299
分享到

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

2023-06-15 09:06:02 299人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章给大家分享的是有关python使用mmap如何实现内存映射文件操作的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。说明 1)什么叫映射?   ==>就是给一个对象(可以是变量、物理等),起一个唯一的别

这篇文章给大家分享的是有关python使用mmap如何实现内存映射文件操作的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

说明

 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 mmapwith 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])

运行之后,效果如下:

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

这里读写会根据文件指针进行移动,比如开始读10个字符,那么第2次读就会接着11个字符开始在读,不会返回起点,而通过切片或者seek()函数可以将指针重置。

至于access参数,表示以什么方式访问,这里以读的方式。

需要特别注意的是,windows不支持创建长度为0的映射。

write(写文件)

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

import mmapWord = 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"了,效果如下:

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

当然,这里除了切片写入之外,也可以使用write()等文件操作方法进行操作,与文件操作一样。需要注意的是假如access等于ACCESS_COPY,那么不会把修改的内容写入磁盘上的文件。

感谢各位的阅读!关于“Python使用mmap如何实现内存映射文件操作”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: Python使用mmap如何实现内存映射文件操作

本文链接: https://www.lsjlt.com/news/279339.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python使用mmap如何实现内存映射文件操作
    这篇文章给大家分享的是有关Python使用mmap如何实现内存映射文件操作的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。说明 1)什么叫映射?   ==>就是给一个对象(可以是变量、物理等),起一个唯一的别...
    99+
    2023-06-15
  • mybatis映射文件操作存储过程如何实现
    本篇内容主要讲解“mybatis映射文件操作存储过程如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mybatis映射文件操作存储过程如何实现”吧!先随便创建一个存储过程DELIMITER...
    99+
    2023-07-05
  • mybatis映射文件操作存储过程的实现
    先随便创建一个存储过程 DELIMITER $$ CREATE PROCEDURE getUserNameById (IN i_id BIGINT, OUT o_name VARCH...
    99+
    2023-03-15
    mybatis映射文件 mybatis映射存储 mybatis映射文件存储
  • 在 Go 语言中实践内存映射和文件操作
    小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《在 Go 语言中实践内存映射和文件操作》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!...
    99+
    2024-04-04
  • Java中如何用内存映射处理大文件
    本篇内容介绍了“Java中如何用内存映射处理大文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!package test;&nbs...
    99+
    2023-06-17
  • 如何在 Golang 中使用内存映射提高文件读写速度?
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-16
  • c# 通过内存映射实现文件共享内存的示例代码
    目录App1代码:App2代码:App3代码:内存映射文件是利用虚拟内存把文件映射到进程的地址空间中去,在此之后进程操作文件,就像操作进程空间里的地址一样了,比如使用c语言的 mem...
    99+
    2024-04-02
  • docker中volumes文件如何实现映射
    小编给大家分享一下docker中volumes文件如何实现映射,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!实现通过docker-compose配置文件volum...
    99+
    2023-06-14
  • Python如何实现文件夹操作
    本文小编为大家详细介绍“Python如何实现文件夹操作”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python如何实现文件夹操作”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、文件操作1.1 文件常规操作操...
    99+
    2023-06-30
  • MyBatis案例 | 使用映射配置文件实现CRUD操作——动态SQL优化条件查询
    本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等,如果刚开始学习Java的小伙伴可以点击下方连接查看专栏 本专栏地址:🔥JavaWeb...
    99+
    2023-09-09
    mybatis sql java
  • 如何使用VBA中的CopyMemory存储数据并从内存映射文件中获取数据
    要使用VBA中的CopyMemory存储数据并从内存映射文件中获取数据,您可以按照以下步骤进行操作:1. 首先,您需要在VBA代码中...
    99+
    2023-09-27
    VBA
  • ASP.NET Core如何使用AutoMapper实现实体映射
    这篇文章将为大家详细讲解有关ASP.NET Core如何使用AutoMapper实现实体映射,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、前言在实际的项目开发过程中,我们使用各种ORM框架可...
    99+
    2023-06-29
  • 如何使用Python文件响应框架实现高效的文件操作?
    如何使用Python文件响应框架实现高效的文件操作? 在日常的开发工作中,文件操作是一个非常常见的任务。Python作为一门高级编程语言,提供了许多方便的文件操作函数和模块。其中,文件响应框架是一个非常强大的工具,可以帮助我们高效地处理大量...
    99+
    2023-07-20
    响应 文件 框架
  • Python如何实现文件操作帮助类
    今天小编给大家分享一下Python如何实现文件操作帮助类的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、业务需求在使用Py...
    99+
    2023-07-05
  • 使用MyBatis-Generator如何自动生成映射文件
    目录MyBatis-Generator自动生成映射文件1、使用cmd命令方式生成2、使用maven方式生成3、如果开发工具为eclipse自动生成MyBatis映射文件工具问题MyB...
    99+
    2024-04-02
  • Linux如何实现文件操作
    这篇文章主要介绍了Linux如何实现文件操作,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。文件是linux中的一个重要概念。在Linux中,一切(几乎一切)都是文件。简单的说...
    99+
    2023-06-28
  • Javascript如何实现文件操作
    这篇文章主要为大家展示了“Javascript如何实现文件操作”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Javascript如何实现文件操作”这篇文章吧。一、功能实现核心:FileSyste...
    99+
    2023-06-03
  • VB.NET如何实现文件操作
    这篇文章主要介绍VB.NET如何实现文件操作,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!VB.NET文件操作打开和关闭文件 1、顺序文件 打开顺序文件,我们可以使用Open语句。它的格式如下:Open p...
    99+
    2023-06-17
  • Python 中如何使用 NumPy 库操作文件?
    Python 中的 NumPy 库是一个非常强大的数学计算工具,它提供了许多高效的操作方法,包括文件操作。在本文中,我们将介绍如何使用 NumPy 库来操作文件。 导入 NumPy 库 在开始使用 NumPy 库之前,首先需要导入库。可...
    99+
    2023-11-04
    文件 关键字 numy
  • VBS如何实现文本文件操作
    这篇文章给大家分享的是有关VBS如何实现文本文件操作的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。对于文件的操作,例如:生成一个或者打开一个或者删除一个.txt格式文件。虽然官方的FILE插件提供了一些基本功能,...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作