Skip to content

Context managers in Python (with statement)

A context manager in Python is a construct that allows for the automatic setup and teardown of resources. The most common way to utilize a context manager is through the with statement^[400-devops__09-Scripting-Language__python__introduction__part-2.files__README.md].

Syntax and Usage

The with statement is used to wrap the execution of a block of code. The general syntax for opening a file using a context manager is:

with open('filename.log', newline='') as file:
    # perform operations on file

This pattern is primarily used to simplify the management of external resources, such as files, network connections, or locks^[400-devops__09-Scripting-Language__python__introduction__part-2.files__README.md].

Benefits over Manual Management

When using the standard open() function, the developer is responsible for explicitly closing the file using the close() method^[400-devops__09-Scripting-Language__python__introduction__part-2.files__README.md]. For example:

f = open("customers.log")
# ... operations ...
f.close()

The with statement improves upon this process by automatically handling the closing of resources^[400-devops__09-Scripting-Language__python__introduction__part-2.files__README.md]. This ensures that files are closed properly even if an error occurs within the code block, preventing resource leaks.

Practical Example: CSV Handling

Context managers are frequently used with the csv library to read and write data safely.^[400-devops__09-Scripting-Language__python__introduction__part-2.files__README.md]

Reading CSV Data

When reading a file, the with statement ensures the file handle is released after the data is processed:

import csv

with open('customers.log', newline='') as customerFile:
    reader = csv.DictReader(customerFile)
    for row in reader:
        print(row['customerID'])
^[400-devops__09-Scripting-Language__python__introduction__part-2.files__README.md]

Writing CSV Data

Similarly, when writing data, the with statement manages the file creation and closing process:

fields = ['customerID', 'firstName', 'lastName']
with open('customers.log', 'w', newline='') as customerFile:
    writer = csv.writer(customerFile)
    writer.writerow(fields)
    writer.writerow([id, first, last])
^[400-devops__09-Scripting-Language__python__introduction__part-2.files__README.md]

Sources

  • 400-devops__09-Scripting-Language__python__introduction__part-2.files__README.md