Using `with open()` — Context Manager for Files
Working with files is a fundamental task in Python.
Reading logs, writing reports, exporting data — it’s everywhere.
Yet one of the most common mistakes is forgetting to properly close files.
That’s exactly the problem the with open() context manager solves.
The problem with manual file handling
file = open("data.txt", "r")
content = file.read()
file.close()
This works — until it doesn’t.
If an exception occurs before file.close() is called, the file remains open, potentially causing resource leaks.
Using with open()
with open("data.txt", "r") as file:
content = file.read()
Once the block exits, Python automatically closes the file, even if an error happens inside the block.
This makes the code:
- safer
- cleaner
- easier to maintain
Writing files safely
with open("output.txt", "w") as file:
file.write("Hello, world!")
No explicit close() call is needed.
Why with open() is the best practice
Using with open():
- prevents forgotten
close()calls - handles exceptions gracefully
- makes file scope explicit
In real-world applications, these details matter.
A common mistake to avoid
Avoid mixing with open() and manual closing:
with open("data.txt", "r") as file:
content = file.read()
file.close() # unnecessary
The context manager already handles cleanup.
Conclusion
In practice, with open() is one of those habits that quietly improves code quality.
If a file needs to be opened, it almost always belongs inside a context manager.