Python has built-in support for handling files, which is an essential feature for tasks such as reading logs, processing configuration files, or performing data analysis. File handling allows interaction with the file system to read data from and write data to files stored on disk. Among the various types of files, text files are the most commonly used for storing readable content.
Understanding how to open and read text files in Python is a foundational skill for developers. Python provides simple and powerful tools to perform this task efficiently.

Understanding the Basics of File I/O in Python
What is File I/O?
File I/O stands for File Input/Output. It refers to the ability of a program to read from and write to files stored on the computer’s file system. Input operations retrieve data from a file, while output operations send data to a file.
Why File I/O is Important
Almost every software application interacts with files in some capacity. Whether it’s loading a saved document, parsing a configuration file, or storing user input, working with files is unavoidable in real-world programming. Python simplifies this process with its built-in functions.
Opening a File in Python
The open() Function
The open() function is the primary method used in Python to access files. It requires at least one argument: the path to the file. Optionally, it accepts a mode that determines how the file should be opened (read, write, append, etc.).
Syntax
file_object = open("filename.txt", "mode")
- “filename.txt” refers to the name or path of the file.
- “mode” defines the mode of operation, such as reading or writing.
File Modes
Understanding file modes is crucial for using the open() function correctly.
Mode Description
‘r’ Read mode (default)
‘w’ Write mode
‘a’ Append mode
‘b’ Binary mode
‘+’ Read and write
‘rb’ Read binary mode
‘rt’ Read text mode (default for text)
Reading text files typically involves using ‘r’ or ‘rt’.
Reading a Text File in Python
Using the read() Method
The simplest way to read a file is by using the read() method. This method reads the entire file content as a single string.
Example
Python
file = open("example.txt", "r")
content = file.read()
print(content)
file.close()
This code reads all content from the file and prints it. However, closing the file is mandatory to free up system resources.
Read more: How to Restrict Access in Google Sheets Using the “Protect Sheets and Ranges” Feature
Reading with with Statement
Using the with statement is a better practice because it ensures that the file is automatically closed after use.
Example
Python
with open("example.txt", "r") as file:
content = file.read()
print(content)
The with block automatically handles the closing of the file even if an error occurs during the read operation.
Reading Files Line by Line
The readline() Method
The readline() method reads one line from the file at a time. This is useful when only a specific line is needed.
Example
Python
with open("example.txt", "r") as file:
first_line = file.readline()
print(first_line)
This method is suitable when you need to iterate over all lines in a file.
Looping Through a File Object
Python allows you to iterate directly over a file object, which reads the file line by line in a memory-efficient way.
Example
Python
with open("example.txt", "r") as file:
for line in file:
print(line)
This is the most memory-efficient method, especially for large files.
Handling Exceptions in File Reading
Using try-except Block
File operations are prone to errors such as file not found, permission denied, etc. Handling these exceptions is essential.

Example
Python
try:
with open("example.txt", "r") as file:
print(file.read())
except FileNotFoundError:
print("File not found.")
except IOError:
print("Error reading file.")
This approach provides more control over file operations and improves reliability.
Reading Large Files Efficiently
Avoiding Memory Issues
For large files, reading the entire file at once can consume too much memory. Using a loop with readline() or file iteration is more efficient.
Example
Python
with open("large_file.txt", "r") as file:
for line in file:
process(line)
This method reads one line at a time, making it suitable for large datasets.
File Encoding
Specifying Encoding
Files can use different encodings such as UTF-8, ASCII, etc. Python’s open() function allows specifying the encoding.
Example
Python
with open("example.txt", "r", encoding="utf-8") as file:
content = file.read()
Specifying the correct encoding prevents errors when reading non-ASCII characters.
Working with Context Managers
Why Context Managers are Preferred
Context managers ensure proper resource management. They handle exceptions gracefully and ensure files are closed automatically.
Example with with Statement
Python
with open("data.txt", "r") as file:
data = file.read()
This method reduces the risk of resource leakage and improves code readability.
Useful File Reading Techniques
Reading Specific Number of Characters
To read a defined number of characters, pass a number to the read() method.
Example
Python
with open("example.txt", "r") as file:
partial = file.read(10) # reads first 10 characters
print(partial)
This technique is useful for previewing a file.
Stripping Whitespace
Using .strip() removes extra newline or whitespace characters from each line.
Example
Python
with open("example.txt", "r") as file:
for line in file:
print(line.strip())
This makes the output cleaner and easier to read.
Reading Files Using pathlib
Introduction to pathlib
Python’s pathlib module provides an object-oriented interface for file handling.
Example
Python
from pathlib import Path
file_path = Path("example.txt")
content = file_path.read_text()
print(content)
Summary of Methods to Read Text Files
Method Description Use Case
read() Reads entire file as one string Small files
readline() Reads a single line at a time When specific lines are needed
readlines() Reads all lines into a list Moderate-size files
for line in file Iterates over each line Large files
pathlib.read_text() Reads using modern API Clean and simple implementations
Best Practices for Reading Files in Python
Use Context Managers
Always use with open(…) to ensure proper closing of files.
Handle Exceptions
Wrap file operations in try-except blocks to prevent crashes and improve robustness.
Choose the Right Method
Pick the reading method based on file size and memory constraints. Avoid read() for large files.
Strip Unwanted Characters
Clean the data using .strip() or .replace() when dealing with user-facing output.
Verify File Encoding
Always verify or explicitly specify the encoding to handle multilingual content correctly.
Real-World Example
Consider a scenario where you need to read a configuration file and extract key-value pairs.
Example
Python
config = {}
with open("config.txt", "r") as file:
for line in file:
if '=' in line:
key, value = line.strip().split('=', 1)
config[key] = value
print(config)
This example demonstrates how text file reading can be used in real applications such as parsing configuration files.
FAQS
What is the safest way to read a file in Python?
The safest and most recommended way to read a file in Python is by using the with open() statement. This context manager automatically handles file opening and closing, even if an error occurs during execution. It prevents memory leaks and makes the code more readable.
Pyhton
with open("example.txt", "r") as file:
content = file.read()
What happens if the file does not exist when using open()?
If the specified file does not exist and the mode is set to ‘r’ (read), Python raises a FileNotFoundError. To avoid program crashes, wrap the open() statement in a try-except block to handle this exception gracefully.
Python
try:
with open("nonexistent.txt", "r") as file:
content = file.read()
except FileNotFoundError:
print("The file was not found.")
How can I read a text file line by line without loading the entire file into memory?
To read a file line by line efficiently, especially for large files, iterate over the file object directly. This approach reads one line at a time without consuming excessive memory.
Python
with open("large_file.txt", "r") as file:
for line in file:
print(line.strip())
What is the difference between read(), readline(), and readlines()?
- read() reads the entire content of the file as one string.
- readline() reads only one line at a time.
- readlines() reads all lines and returns a list, where each line is an element.
Choose based on the file size and your specific needs.
How do I handle different encodings when reading a file in Python?
Text files may use various encodings (e.g., UTF-8, ISO-8859-1). If the encoding is not standard, use the encoding parameter in the open() function to specify the correct one and avoid decoding errors.
Python
with open("example.txt", "r", encoding="utf-8") as file:
content = file.read()
Can I read only a specific number of characters from a file?
Yes, the read() method accepts an optional argument that specifies the number of characters to read. This is useful when you need to preview part of a file or extract data of fixed length.
Pyhton
with open("example.txt", "r") as file:
snippet = file.read(50) # Reads the first 50 characters
print(snippet)
How can I check if a file exists before reading it?
To verify whether a file exists before attempting to read it, use the os.path.exists() method or Path.exists() from the pathlib module.
Pyhton
import os
if os.path.exists("example.txt"):
with open("example.txt", "r") as file:
print(file.read())
else:
print("File does not exist.")
Or using pathlib:
Python
from pathlib import Path
file_path = Path("example.txt")
if file_path.exists():
print(file_path.read_text())
How do I avoid reading blank lines or lines with only whitespace?
When iterating through a file, you can use the .strip() method and an if condition to skip empty or whitespace-only lines.
Python
with open("example.txt", "r") as file:
for line in file:
clean_line = line.strip()
if clean_line:
print(clean_line)
Conclusion
Reading a text file in Python is a fundamental task that is often required in real-world applications. Whether handling logs, configurations, or data files, understanding the available methods and best practices ensures that the process is both efficient and reliable.
Python offers versatile tools ranging from the traditional open() method to modern object-oriented approaches like pathlib. Employing exception handling and memory-efficient techniques is critical when working with large or complex files.
Mastering file reading not only enhances your programming toolkit but also builds the foundation for more advanced tasks such as file writing, data processing, and text manipulation.
