File Handling: Read and Write Data Safely
Introduction
In this chapter, you will learn file handling in Python, including how to read, write, append, and manage text files safely. File operations are a core skill for logs, reports, configuration, and data storage. Once you understand this chapter, your scripts can persist data beyond program runtime.
Prerequisites
- Python
3.10+installed - Basic understanding of strings, loops, and exception handling
- Ability to run
.pyfiles in terminal or IDE
Why File Handling Matters
Without files, program data is lost when execution ends.
With file handling, you can:
- store user data
- save reports
- load configuration
- process logs and datasets
1) Open Files with open()
Basic syntax:
open(file_path, mode, encoding="utf-8")Common modes:
"r": read (default)"w": write (overwrite)"a": append"x": create new file, fail if exists
Example:
# Open file for reading
f = open("notes.txt", "r", encoding="utf-8")
content = f.read()
print(content)
f.close()2) Use with (Recommended)
with automatically closes files, even if errors happen.
# Safe file read
with open("notes.txt", "r", encoding="utf-8") as f:
content = f.read()
print(content)Tip
Best Practice
Prefer with open(...) over manual open()/close() to avoid resource leaks.
3) Read File Content
Read Entire File
with open("notes.txt", "r", encoding="utf-8") as f:
data = f.read()
print(data)Read One Line
with open("notes.txt", "r", encoding="utf-8") as f:
first_line = f.readline()
print(first_line)Read All Lines as List
with open("notes.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
print(lines)Iterate Line by Line (Memory Friendly)
with open("notes.txt", "r", encoding="utf-8") as f:
for line in f:
print(line.strip())4) Write and Append Files
Write (Overwrite)
with open("report.txt", "w", encoding="utf-8") as f:
f.write("Python learning report\n")
f.write("Day 1 completed\n")Append
with open("report.txt", "a", encoding="utf-8") as f:
f.write("Day 2 completed\n")"w" clears old content; "a" keeps old content and adds new text.
5) File Existence and Exceptions
File operations can fail, so combine with exception handling.
try:
with open("missing.txt", "r", encoding="utf-8") as f:
print(f.read())
except FileNotFoundError:
print("File not found.")
except PermissionError:
print("No permission to access file.")This keeps your script user-friendly and robust.
6) Real Mini Example: Score Report File
Write student scores to file, then read and print summary.
# Student scores
scores = {
"Emma": 95,
"Liam": 88,
"Noah": 92
}
# Write score report
with open("score_report.txt", "w", encoding="utf-8") as f:
f.write("=== Score Report ===\n")
for name, score in scores.items():
f.write(f"{name}: {score}\n")
# Read and print report
with open("score_report.txt", "r", encoding="utf-8") as f:
print(f.read())This pattern is common in export, reporting, and audit logs.
Warning
Be careful with "w" mode.
It overwrites existing content immediately.
7) File Path Tips (Beginner-Friendly)
- Use relative paths for project-local files
- Use raw strings for Windows paths, for example
r"C:\data\file.txt" - Keep consistent encoding (
utf-8) for cross-platform safety
Common Beginner Mistakes
Mistake 1: Forgetting to Close File
This can cause file lock or incomplete writes in some environments.
Mistake 2: Using Wrong Mode
Using "w" when intending append will erase existing data.
Mistake 3: Ignoring Encoding
Missing or inconsistent encoding may cause garbled text.
Surprise Practice Challenge
Build a "Daily Study Logger":
- Ask user to input today's study topic and minutes
- Append one line to
study_log.txt - Read all logs and print total study minutes
- Handle file-not-found gracefully
- Print a summary report in terminal
If you finish this, you can already build simple persistent CLI tools.
FAQ
Should I always use utf-8?
In most modern projects, yes. It avoids many cross-platform text issues.
What is the difference between read() and readlines()?
read() returns one string; readlines() returns a list of lines.
Is line-by-line reading better than read()?
For large files, yes. It is more memory-efficient.
How do I avoid accidentally deleting file content?
Use "a" mode for append, and create backups before overwrite operations.