讲师中心 微信公众号
AI工具推荐 视频效率加速

Python中mmap模块 内存映射文件mmap的高效文件访问

阿强大大_2431

阿强大大_2431

发布时间:2025-06-07 10:51:03

|

352人浏览过

|

来源于php中文网

原创

在python中,如果你需要处理大文件或者追求高效的文件读写方式,mmap模块是一个非常值得尝试的工具。它通过内存映射的方式访问文件内容,避免了频繁的i/o操作,提升了性能。


什么是mmap?为什么用它?

mmap是“memory-mapped file”的缩写,意思是把一个文件直接映射到进程的地址空间中。这样你就可以像操作内存一样来操作文件内容,而不需要反复调用read()或write()。

这种方式特别适合以下场景:

  • 文件很大,常规读取太慢
  • 需要随机访问文件的不同部分
  • 多个进程需要共享同一个文件的数据

相比传统的文件操作,mmap减少了数据在内核和用户空间之间的拷贝次数,效率更高。


如何使用mmap模块?

在Python中使用mmap模块的基本流程如下:

立即学习“Python免费学习笔记(深入)”;

  1. 打开一个文件,获取文件描述符(通常用os.open())
  2. 创建一个mmap对象,将文件映射到内存
  3. 像操作字符串一样读写内存中的内容
  4. 完成后关闭mmap对象和文件描述符

下面是一个简单的例子:

import mmap
import os

# 打开文件
fd = os.open("example.txt", os.O_RDWR)

# 创建内存映射
mm = mmap.mmap(fd, 0)  # 0表示整个文件都映射

# 读取内容
print(mm.readline())

# 修改内容(假设前几个字节是可写的)
mm[0:5] = b"Hello"

# 关闭
mm.close()
os.close(fd)

需要注意几点:

Accessibility Review
Accessibility Review

对设计或页面进行 WCAG 2.1 AA 无障碍审计。触发关键词:“audit accessibility”、 “check a11y”、 “is this accessible?” 或在审查设计时使用。

下载
  • 如果你只打算读取文件,可以设置access=mmap.ACCESS_READ
  • 要修改文件内容,确保文件大小足够,并且映射时指定正确的模式
  • 使用完记得关闭mmap对象和文件描述符,否则会占用资源

mmap的常见用途和技巧

快速查找关键字

如果你需要在一个大文本文件中查找某个关键词,mmap比逐行读取快很多。你可以直接使用字符串方法进行搜索:

pos = mm.find(b"target_keyword")
if pos != -1:
    print(f"Found at position {pos}")

这种方法不会加载整个文件到内存,只是在需要时访问对应内存区域。

高效修改文件内容

如果你想修改文件中间某段内容,传统做法可能需要先读整个文件、修改、再写回去。但用mmap可以直接定位并修改:

mm.seek(100)
mm.write(b"new content here")

注意:写入的内容长度不能超过原位置预留的空间,否则会覆盖后续内容。

多进程共享文件数据

如果多个进程需要访问同一份数据,可以用mmap配合flags=mmap.MAP_SHARED实现共享内存。这样不同进程看到的是同一块内存区域,适合做进程间通信。


使用mmap的注意事项

虽然mmap高效,但也有一些限制和容易出错的地方:

  • 文件必须存在:创建新的文件并映射可能会失败,最好先创建好并指定大小。
  • 权限问题:映射时的访问权限(只读/读写)要和文件打开方式一致,否则会报错。
  • 异常处理:在操作过程中可能会出现越界访问或非法写入,建议加try...finally确保关闭资源。
  • 平台差异:Windows和Linux在某些参数上支持略有不同,跨平台使用时要注意兼容性。

基本上就这些。掌握好mmap的使用,能让你在处理大文件或需要高性能IO的场景下事半功倍。虽然不是每个项目都需要它,但在合适的地方用上,效果很明显。

热门AI工具

更多
咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1698

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2604

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6024

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

5509

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

7194

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

10354

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

5279

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

5687

2025.08.07

Linux 新手先学哪些命令
Linux 新手先学哪些命令

Linux新手命令专题汇集终端基础、文件目录操作、文本查看、软件安装和权限管理等入门文章,帮助按实际任务练习常用命令并建立命令行操作习惯。

0

2026.10.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
什么是Subversion (SVN)?
什么是Subversion (SVN)?

共0课时 | 134人学习

PHP基础入门课程
PHP基础入门课程

共33课时 | 3.4万人学习

极致CMS零基础建站教学视频
极致CMS零基础建站教学视频

共62课时 | 9.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn