# Python Mmap Module

The `mmap` module provides memory-mapped file objects. A memory-mapped file behaves like both a `bytearray` and a file object. You can use mmap objects in most places where `bytearray` is expected; for example, you can use the `re` module to search through a memory-mapped file.

## Importing the Module

```python
import mmap
```

## Creating a Memory-Mapped File

To map a file into memory, you first need to open the file with a mode that allows updates (usually `r+b` or `w+b`).

```python
import mmap

# Create a sample file
with open("example.txt", "wb") as f:
    f.write(b"Hello Python!")

with open("example.txt", "r+b") as f:
    # memory-map the file, size 0 means whole file
    # access=mmap.ACCESS_WRITE specifies write-through
    with mmap.mmap(f.fileno(), 0) as mm:
        # Read content via standard file methods
        print(mm.read(5))  # Output: b'Hello'
        
        # Read content via slice notation
        print(mm[:5])      # Output: b'Hello'
```

## Modifying Data

You can modify the file content using slice notation or the `write()` method.

```python
with open("example.txt", "r+b") as f:
    with mmap.mmap(f.fileno(), 0) as mm:
        # Update content using slice notation
        # Note: new content must have the same size as the slice
        mm[6:12] = b"World!"
        
        mm.seek(0)
        print(mm.readline())  # Output: b'Hello World!!'
```

## Access Modes

*   `ACCESS_READ`: Opens the mmap for reading only.
*   `ACCESS_WRITE`: Opens the mmap for writing (changes affect the underlying file).
*   `ACCESS_COPY`: Opens the mmap for copy-on-write (changes do not affect the underlying file).

```python
with open("example.txt", "r") as f:
    with mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) as mm:
        print(mm.readline())
```

## Searching

Since mmap objects behave like bytearrays, you can search them directly.

```python
with open("example.txt", "r+b") as f:
    with mmap.mmap(f.fileno(), 0) as mm:
        if mm.find(b"Python") != -1:
            print("Found 'Python'")
```

[[programming/python/python]]