Advanced File Handling
Binary files, memory mapping, temporary files, and file patterns.
Overview
Master advanced file handling techniques.
Binary Files
# Write binary
data = bytes([72, 101, 108, 108, 111]) # "Hello"
with open("file.bin", "wb") as f:
f.write(data)
# Read binary
with open("file.bin", "rb") as f:
data = f.read()
print(data) # b'Hello'
# Image handling
from PIL import Image
# Read image
img = Image.open("photo.jpg")
print(img.size)
# Save image
img.save("copy.jpg")
Memory Mapping
import mmap
# Create memory-mapped file
with open("large_file.bin", "r+b") as f:
mm = mmap.mmap(f.fileno(), 0)
# Read/write like bytes
print(mm[:10])
mm[0:5] = b"Hello"
mm.close()
Temporary Files
import tempfile
# Temporary file
with tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=False) as f:
f.write("temp data")
temp_name = f.name
# Temporary directory
with tempfile.TemporaryDirectory() as tmpdir:
print(f"Working in: {tmpdir}")
# Files created here are automatically deleted
# Temporary file object
tf = tempfile.TemporaryFile(mode='w+t')
tf.write("Hello")
tf.seek(0)
print(tf.read())
tf.close()
File Patterns
import os
import glob
# Find files
txt_files = glob.glob("*.txt")
print(txt_files)
# Recursive search
all_py_files = glob.glob("**/*.py", recursive=True)
# File operations
def process_files(directory, pattern):
for filepath in glob.glob(os.path.join(directory, pattern)):
if os.path.isfile(filepath):
with open(filepath) as f:
yield filepath, f.read()
# Streaming large files
def read_large_file(file_path):
with open(file_path, 'r') as f:
for line in f:
yield line.strip()
Practice
Implement a file backup system that handles binary and text files.