ZetCode

Python open Function

Last modified March 26, 2025

This comprehensive guide explores Python's open function, the primary method for file handling in Python. We'll cover file modes, reading and writing operations, context managers, encoding handling, and best practices. Through practical examples, you'll master file operations in Python.

Basic Definitions

The open function creates a file object that allows reading from or writing to files. It requires a file path and returns a file object. The basic syntax is open(file, mode='r', buffering=-1, encoding=None).

File modes specify how the file should be opened: 'r' for reading, 'w' for writing, 'a' for appending, and 'x' for exclusive creation. Adding 'b' opens the file in binary mode, while '+' allows both reading and writing.

The function raises FileNotFoundError when trying to read a non- existent file in read mode. In write mode, it creates the file if it doesn't exist. Always close files after use to free system resources.

Basic File Reading

This example demonstrates the simplest way to read a file's contents using the open function. We'll open a text file and print its contents.

basic_read.py
# Open a file in read mode
file = open('example.txt', 'r')

# Read the entire file content
content = file.read()

# Print the content
print(content)

# Close the file
file.close()

This code opens 'example.txt' in read mode ('r'), reads its entire content into a string variable, prints it, and closes the file. The read method without arguments reads until end of file. Remember to always close files to prevent resource leaks.

Writing to a File

This example shows how to create a new file and write data to it using the open function in write mode ('w').

file_write.py
# Open a file in write mode
with open('output.txt', 'w') as file:
    file.write('First line of text\n')
    file.write('Second line of text\n')
    file.write('Third line with number: %d\n' % 42)

The code creates 'output.txt' (or overwrites if it exists) and writes three lines of text. We use the with statement which automatically closes the file. The write method writes strings exactly as given, so we include \n for newlines.

Reading Line by Line

For large files or when processing text data, reading line by line is more memory efficient than reading the entire file at once.

read_lines.py
# Open file and process line by line
with open('data.txt', 'r') as file:
    line_number = 1
    for line in file:
        print(f"Line {line_number}: {line.strip()}")
        line_number += 1

This example opens 'data.txt' and processes each line individually. The file object is iterable, yielding one line per iteration. strip removes leading/trailing whitespace and the newline character. This method is memory efficient as it doesn't load the entire file at once.

Appending to a File

Append mode ('a') allows adding content to the end of an existing file without overwriting its current contents.

file_append.py
import datetime

# Append timestamp and message to log file
with open('app.log', 'a') as log_file:
    timestamp = datetime.datetime.now().isoformat()
    log_file.write(f"[{timestamp}] Application started\n")
    log_file.write(f"[{timestamp}] Loading configuration\n")

This code appends timestamped messages to 'app.log'. If the file doesn't exist, it will be created. Each run of the program adds new lines without affecting previous content. This is ideal for logging scenarios where you want to maintain a history of events.

Binary File Operations

Binary mode ('b') is essential when working with non-text files like images, executables, or any file where byte-level accuracy is required.

binary_operations.py
# Copy a binary file (e.g., an image)
with open('source.jpg', 'rb') as source:
    with open('copy.jpg', 'wb') as destination:
        chunk_size = 4096  # 4KB chunks
        while True:
            chunk = source.read(chunk_size)
            if not chunk:
                break
            destination.write(chunk)

This example copies a JPEG file by reading it in binary mode ('rb') and writing in binary mode ('wb'). We read and write in chunks to handle large files efficiently. Binary mode prevents any encoding/decoding or newline translation that could corrupt binary data.

Best Practices

Source References

Author

My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.

List all Python tutorials.