Python内存映射文件读写方式

蓝鲸
蓝鲸
发布时间:2026-10-11| 3人浏览过
原创

本文介绍如何使用Python的mmap模块实现内存映射文件读写。通过mmap,可以将文件映射到内存中,像操作数组一样读写二进制文件。文章提供了详细的代码示例,展示了如何创建、读写和关闭内存映射文件,并讨论了内存映射的优势和注意事项。

Python内存映射文件读写方式

使用mmap模块实现对文件的内存映射。内存映射允许像操作数组一样读写二进制文件。mmap对象可作为上下文管理器使用,上下文管理器模式下底层文件会自动关闭。默认打开的文件模式为可读可写,对数据的修改会自动拷贝回原始文件。设置access参数为mmap.ACCESS_READ实现只读访问,设置access参数为mmap.ACCESS_COPY仅本地修改。内存映射不会将整个文件读到内存中,操作系统仅为文件内容保留一段虚拟内存。访问文件不同区域时按需映射到内存区域,未访问的文件部分保留在磁盘上。多个Python解释器可对同一文件做内存映射,得到的mmap对象可用于解释器间交换数据。所有解释器可同时读/写数据,一个解释器的修改会自动反映到其他解释器。

import os
import time
import mmap
 
filename = 'test.txt'
 
#如果不存在,创建。
if not os.path.exists(filename):
 open(filename, 'w')
 
print(os.path.isdir(filename))
if os.path.isfile(filename):
 print(time.ctime(os.path.getctime(filename)))
 
fd = os.open(filename, os.O_RDWR)
m = mmap.mmap(fd, 50, access=mmap.ACCESS_WRITE) # 1024字节的文件。
m.seek(2) 
buf1 = bytes(b'Zhang')
m[2:len(buf1)+2] = buf1
 
buf2 = b'Phil'
 
m.seek(20) # 定位写入的位置。
m.write(buf2) # 写入字节数据。
m.close()
 
fd = os.open(filename, os.O_RDWR)
m = mmap.mmap(fd, 50, access=mmap.ACCESS_READ)
m.seek(20)
buf3 = m.read(len(buf2))
m.close()
print(list(buf3))
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)
>>> size = 1000000
>>> with open('data','wb') as f:
  f.seek(size-1)
  f.write(b'\x00')
>>> m = memory_map('data')
>>> len(m)
1000000
>>> m[:10]
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
>>> m[0]
0
>>> m[0:11]=b'Hello World'#改变一个切片
>>> m.close()
>>> with open('data','rb') as f:#验证改变已经生效
 print(f.read(11))
 
b'Hello World'
>>> with memory_map('data') as m:
 print(len(m))
 print(m[0:11])
 
1000000
b'Hello World'

以上就是Python内存映射文件读写方式的详细内容,更多关于Python内存映射文件读写方式资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。