import os import mmap if __name__ == '__main__': def memory_map(file_path, access=mmap.ACCESS_WRITE): size = os.path.getsize(file_path) fild_data = os.open(file_path, os.O_RDWR) return mmap.mmap(fild_data, size, access=access) SIZE = 1000000 # with open(r'5.文件与IO/10.data', 'wb') as f: # f.seek(SIZE - 1) # f.write(b'\x00') m = memory_map('5.文件与IO/10.data') print(len(m)) m[0:11] = b'Hello World' m.close() with open(r'5.文件与IO/10.data', 'rb') as f: print(f.read(11)) # 当然,这个函数得益于他的open内嵌,也能在with的上下文中打开并自动关闭 with memory_map('5.文件与IO/10.data') as m: print(len(m)) print(m.closed) # 当然,如果你想只读,可以在access里设置成mmp.ACCESS_READ, # 如果只想把文件拷贝到内存而不是直接在文件里修改,mmp.ACCESS_COPY非常有用 # mmap和memoryview又有所不同 m = memory_map('5.文件与IO/10.data') v = memoryview(m).cast('I') v[0] = 7 m[0:4] = b'\x07\x01\x00\x00' print(m[0:4]) print(v[0]) # 可以看出来,memoryview在做转换的时候用的是小端存储 print(int.from_bytes(m[0:4], byteorder='little')) print(int.from_bytes(m[0:4], byteorder='big')) v.release() m.close()