Python内存映射文件读写方式

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

本文介绍如何使用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 相关产品和应用

全部下载

专题列表