Python内存映射文件读写方式
本文介绍如何使用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内存映射文件读写方式资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









