I don't think this is possible. The usual way is to write and close, then read. If you want to write again, just overwrite the `memfile` object. For example: from rasterio.io import MemoryFile import rasterio import numpy as np def create_memory_file(data, west_bound, north_bound, cellsize, driver='GTIFF'): #data is a numpy array if data.ndim ==2: # Handle 2 or 3D input arrays data = np.expand_dims(data, axis=0) dtype = data.dtype shape = data.shape transform = rasterio.transform.from_origin(west_bound, north_bound, cellsize, cellsize) with MemoryFile() as memfile: with memfile.open( driver=driver, width= shape[2], height = shape[1], transform=transform, count=shape[0], dtype=dtype) as dataset: dataset.write(data) return memfile.open() # <==== Re-open the memfile data = np.array([[1,2,3], [4,5,6], [7,8,9]]).astype(np.int32) memfile = create_memory_file(data, 0, 2, 0.5) print(memfile.read()) data = np.array([[4,5,6], [7,8,9], [10,11, 12]]).astype(np.int32) memfile = create_memory_file(data, 0, 2, 0.5) print(memfile.read()) Output: [[[1 2 3] [4 5 6] [7 8 9]]] [[[ 4 5 6] [ 7 8 9] [10 11 12]]] As of `rasterio` 1.0.8 you can write and read as datasets are opened in `r+` mode. Note that the underlying GDAL driver needs to support [creation of a new dataset from scratch][1] not just creation of a copy of and existing dataset. For examaple: from rasterio.io import MemoryFile import rasterio import numpy as np def create_memory_file(data, west_bound, north_bound, cellsize, driver='GTIFF'): #data is a numpy array if data.ndim ==2: # Handle 2 or 3D input arrays data = np.expand_dims(data, axis=0) dtype = data.dtype shape = data.shape transform = rasterio.transform.from_origin(west_bound, north_bound, cellsize, cellsize) with MemoryFile() as memfile: dataset = memfile.open( driver=driver, width= shape[2], height = shape[1], transform=transform, count=shape[0], dtype=dtype) dataset.write(data) return dataset data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]).astype(np.int32) memfile = create_memory_file(data, 0, 2, 0.5) print(memfile.read()) data = np.array([[4, 5, 6], [7, 8, 9], [10, 11, 12]]).astype(np.int32) memfile.write(data, 1) print(memfile.read()) Output: [[[1 2 3] [4 5 6] [7 8 9]]] [[[ 4 5 6] [ 7 8 9] [10 11 12]]] [1]: https://www.gdal.org/formats_list.html#footnote1