Memory is volatile; when your Python script finishes executing, all your variables are destroyed. To build real applications—saving user data, logging errors, or storing AI model weights—you must master reading from and writing to the physical disk.
1The Open Function
The bridge between your Python script and the operating system's file system is the open() function. It requires two arguments: the file path and the "Mode".
Modes determine your permissions. r (Read) allows you to inspect the file, but crashes if the file doesn't exist. w (Write) allows you to write text, but *dangerously* overwrites the entire file if it already exists. a (Append) safely adds new text to the absolute end of the file. If you use the basic open() function, you must manually call .close() when you are done to release the operating system's lock on the file. Failing to do so causes memory leaks.
# Basic file reading
file = open('dataset.csv', 'r')
data = file.read()
print(data)
# CRITICAL: Always close the handle
file.close()1,Alice,25
2,Bob,30
2Context Managers (The 'with' Statement)
Manually calling .close() is a terrible engineering practice. If your script crashes while reading the file, it will never reach the .close() statement, leaving the file locked by the OS.
Professional developers exclusively use "Context Managers" via the with keyword. A context manager automatically handles the setup and teardown of external resources. When the indented block of code finishes—or even if it crashes catastrophically—the context manager guarantees that the file is safely closed and the memory is freed. It is the only acceptable way to handle file I/O in production environments.
# The professional standard
with open('dataset.csv', 'r') as file:
data = file.read()
print(f"Loaded {len(data)} bytes")
# File is automatically closed here!
print("File safely closed.")File safely closed.
3Writing and Appending
Writing data requires precision. If you open a file in w (Write) mode, the operating system instantly wipes the file clean the millisecond it opens. This is great for saving a fresh configuration, but disastrous if you are trying to keep a running log of server errors.
To preserve existing data and add to it, use a (Append) mode. It opens the file and places the cursor at the very end. Remember to manually add newline characters (\n) when writing or appending, because Python's .write() method does not automatically drop to a new line like print() does.
# 'w' wipes the file and writes anew
with open('config.txt', 'w') as f:
f.write("theme=dark\n")
# 'a' adds to the end safely
with open('server_logs.txt', 'a') as f:
f.write("[ERROR] Timeout at 12:00\n")
print("I/O operations complete.")