How to Open a File in Python
What you’ll build or solve
You’ll open files in Python using with open(...), read or write text safely, and avoid common errors like wrong paths or permission issues.
When this approach works best
This approach works best when you need to:
Learn Python on Mimo
- Read a text file, like a config file, a log, or a simple data export.
- Write output to a file, like a report or a saved result.
- Append new lines to an existing file without overwriting it.
Avoid this approach when:
- You need advanced path handling across folders. Use a dedicated guide focused on file paths.
- You need parsing for formats like JSON or CSV. Open the file first, then use the right parsing tool for that format.
Prerequisites
- Python 3 installed
- You can run a Python script
- You know what a file path is, such as
notes.txtordata/report.txt
Step-by-step instructions
1) Open and read a file
Use with so Python closes the file automatically.
withopen("notes.txt","r",encoding="utf-8")asf:
text=f.read()
print(text)
Mode "r" means read. If the file does not exist, you get a FileNotFoundError.
2) Read one line at a time
Use this approach for logs or large files.
Swift
withopen("notes.txt","r",encoding="utf-8")asf:
forlineinf:
print(line.rstrip("\n"))
What to look for:
Each line usually ends with \n. Stripping it avoids double-spaced output.
3) Write text to a file (overwrite)
Use mode "w" to create the file or replace what is already there.
report="Status: OK\n"
withopen("report.txt","w",encoding="utf-8")asf:
f.write(report)
If report.txt already exists, its old contents are replaced.
4) Append text to an existing file
Use mode "a" to add to the end of a file.
log_line="Started job\n"
withopen("app.log","a",encoding="utf-8")asf:
f.write(log_line)
What to look for:
Add \n yourself if you want each entry on a new line.
Examples you can copy
1) Read a file and skip blank lines
lines= []
withopen("config.txt","r",encoding="utf-8")asf:
forlineinf:
cleaned=line.strip()
ifcleaned:
lines.append(cleaned)
print(lines)
2) Copy one file into another
withopen("input.txt","r",encoding="utf-8")assrc:
withopen("output.txt","w",encoding="utf-8")asdst:
forlineinsrc:
dst.write(line)
3) Append a timestamped line to a log
fromdatetimeimportdatetime
line=f"{datetime.now().isoformat()} - started\n"
withopen("app.log","a",encoding="utf-8")asf:
f.write(line)
Common mistakes and how to fix them
Mistake 1: Using the wrong path
You might write:
withopen("data.txt","r",encoding="utf-8")asf:
text=f.read()
Why it breaks:
The file is not in the folder your script is running from, so you get FileNotFoundError.
Correct approach:
withopen("data/data.txt","r",encoding="utf-8")asf:
text=f.read()
Make sure the relative path matches your project structure.
Mistake 2: Using the wrong mode
You might write:
LUA
withopen("report.txt","w",encoding="utf-8")asf:
f.write("New line\n")
Why it breaks:
"w" overwrites the file each time you run the script.
Correct approach:
LUA
withopen("report.txt","a",encoding="utf-8")asf:
f.write("New line\n")
Use "a" to append instead of overwrite.
Mistake 3: Seeing weird characters in the output
You might write:
LUA
withopen("notes.txt","r")asf:
print(f.read())
Why it breaks:
Python may guess the wrong encoding for the file.
Correct approach:
LUA
withopen("notes.txt","r",encoding="utf-8")asf:
print(f.read())
Explicitly setting encoding="utf-8" avoids common issues.
Troubleshooting
If you see FileNotFoundError, confirm the file exists where your script is running. If you use a relative path like data/file.txt, confirm the data folder is in your current working directory.
If you see PermissionError, close the file in other applications or choose a different output folder.
If your output file stays empty, confirm you used "w" or "a" mode and that you called write() with the content you expect.
If your text shows strange symbols, set encoding="utf-8" or match the file’s actual encoding.
If the same relative path works sometimes and breaks other times, you are likely running the script from different folders.
Quick recap
- Use
with open(path, mode, encoding="utf-8") as f:to open files safely. - Use
f.read()for small files andfor line in f:for large files. - Use
"w"to overwrite and"a"to append. - Add
\nyourself when writing lines. - Set
encoding="utf-8"to avoid common text encoding issues.
Join 35M+ people learning for free on Mimo
4.8 out of 5 across 1M+ reviews
Check us out on Apple AppStore, Google Play Store, and Trustpilot