Giới thiệu về xử lý file trong Python
Bạn có biết, thao tác đọc file là một kỹ năng cơ bản nhưng rất quan trọng trong lập trình Python không? Đây chính là nền tảng giúp bạn xử lý dữ liệu, tự động hóa công việc và xây dựng những ứng dụng thực tế. Nhiều người mới học thường bối rối không biết bắt đầu từ đâu khi làm việc với file, đặc biệt là khi gặp phải các lỗi encoding hay file không tồn tại.

Bài viết này sẽ giúp bạn hiểu rõ cách đọc file trong Python, từ cú pháp cơ bản đến các phương pháp linh hoạt để xử lý mọi tình huống. Chúng ta sẽ cùng khám phá: khái quát về file text và binary, cách mở-đóng file an toàn, các phương pháp đọc nội dung hiệu quả, ví dụ minh họa thực tế, những lưu ý quan trọng và các kỹ thuật nâng cao.
Với kinh nghiệm nhiều năm trong lĩnh vực lập trình, tôi sẽ đồng hành cùng bạn từng bước một cách chi tiết nhất. Hãy cùng bắt đầu hành trình làm chủ kỹ năng đọc file trong Python nhé!
Mở và đóng file với Python
Sử dụng hàm open() và các chế độ mở file
Hàm open()
là cánh cửa đầu tiên để tiếp cận file trong Python. Cú pháp cơ bản nhất là open(tên_file, chế_độ)
, trong đó chế độ phổ biến nhất là 'r'
(read) cho phép đọc file văn bản. Đây là điểm khởi đầu mà mọi lập trình viên Python cần nắm vững.

# Mở file ở chế độ đọc cơ bản
file = open('data.txt', 'r')
Các chế độ mở file quan trọng khác bao gồm: 'r'
(đọc), 'w'
(ghi), 'a'
(ghi thêm), 'rb'
(đọc binary), 'rt'
(đọc text – mặc định). Khi đọc file, bạn hầu như chỉ cần quan tâm đến chế độ 'r'
hoặc 'rb'
tùy vào loại file. Chi tiết về ứng dụng của Python trong nhiều lĩnh vực cũng giúp bạn hiểu hơn về tính đa dạng khi xử lý dữ liệu.
Đóng file bằng close() và with statement
Tại sao cần đóng file? Khi mở file, hệ thống sẽ cấp phát tài nguyên và tạo kết nối. Nếu không đóng file, bạn có thể gặp nguy cơ rò rỉ tài nguyên, đặc biệt khi xử lý nhiều file cùng lúc.
# Cách thủ công - dễ quên đóng file
file = open('data.txt', 'r')
content = file.read()
file.close() # Dễ quên bước này!
# Cách an toàn với with statement
with open('data.txt', 'r') as file:
content = file.read()
# File tự động đóng khi ra khỏi block
Ưu điểm của with statement
là giúp tự động đóng file ngay cả khi xảy ra lỗi, đảm bảo an toàn cho chương trình. Đây là best practice mà tôi khuyến khích bạn sử dụng từ những ngày đầu học Python. Nếu bạn muốn tìm hiểu thêm về hàm trong Python, đây sẽ là nền tảng quan trọng để tổ chức và thao tác dữ liệu hiệu quả.
Các phương pháp đọc file
read() – Đọc toàn bộ nội dung file
Phương pháp read()
đơn giản nhất, phù hợp với file có kích thước nhỏ. Nó đọc toàn bộ nội dung file và trả về dưới dạng một chuỗi duy nhất.

with open('data.txt', 'r', encoding='utf-8') as file:
content = file.read()
print(content)
Lưu ý quan trọng: read()
tải toàn bộ file vào bộ nhớ, vì vậy hãy cẩn thận khi sử dụng với file lớn. Nếu file có kích thước vài trăm MB, máy tính của bạn có thể bị lag hoặc hết memory. Để hiểu rõ hơn về các kiểu dữ liệu trong Python, việc biết cách xử lý dữ liệu trong bộ nhớ là rất cần thiết.
readline() – Đọc từng dòng một
Phương pháp readline()
giúp bạn đọc file từng dòng một cách tuần tự. Đây là lựa chọn tốt khi bạn cần xử lý file lớn hoặc chỉ quan tâm đến một phần nội dung.
with open('data.txt', 'r', encoding='utf-8') as file:
first_line = file.readline()
second_line = file.readline()
print(f"Dòng 1: {first_line}")
print(f"Dòng 2: {second_line}")
readlines() – Đọc thành list các dòng
Phương pháp readlines()
đọc toàn bộ file và trả về một list, mỗi phần tử là một dòng. Tiện lợi khi bạn muốn thao tác với từng dòng dưới dạng list.
with open('data.txt', 'r', encoding='utf-8') as file:
lines = file.readlines()
for i, line in enumerate(lines):
print(f"Dòng {i+1}: {line.strip()}")
Đọc file bằng vòng lặp for
Đây là phương pháp an toàn và hiệu quả nhất cho mọi kích thước file. Python tự động tối ưu việc đọc file theo từng dòng mà không tốn nhiều bộ nhớ.

with open('data.txt', 'r', encoding='utf-8') as file:
for line_number, line in enumerate(file, 1):
print(f"Dòng {line_number}: {line.strip()}")
Kỹ thuật này có liên quan mật thiết đến vòng lặp for trong Python, giúp bạn tận dụng cú pháp và cách sử dụng hiệu quả để xử lý file và dữ liệu dòng lặp.
Ví dụ minh họa từng phương pháp
Hãy cùng tạo một file mẫu dulieu.txt
với nội dung sau để thực hành:
Xin chào Python!
Đây là dòng thứ hai.
Dòng cuối cùng của file.
Ví dụ với read()
try:
with open('dulieu.txt', 'r', encoding='utf-8') as file:
content = file.read()
print("Nội dung toàn bộ file:")
print(content)
except FileNotFoundError:
print("Lỗi: Không tìm thấy file!")
except UnicodeDecodeError:
print("Lỗi: Không thể đọc file với encoding UTF-8")
Ví dụ với readline()

with open('dulieu.txt', 'r', encoding='utf-8') as file:
count = 0
while True:
line = file.readline()
if not line: # Đã đọc hết file
break
count += 1
print(f"Dòng {count}: {line.strip()}")
Ví dụ với readlines()
with open('dulieu.txt', 'r', encoding='utf-8') as file:
lines = file.readlines()
print(f"File có {len(lines)} dòng:")
for i, line in enumerate(lines):
print(f" {i+1}. {line.strip()}")
Những lỗi phổ biến bạn có thể gặp: FileNotFoundError
khi file không tồn tại, UnicodeDecodeError
khi encoding không đúng, PermissionError
khi không có quyền đọc file. Để xử lý lỗi hiệu quả hơn, bạn có thể tham khảo kỹ thuật xử lý lỗi trong lệnh if trong Python.
Lưu ý và best practices khi đọc file
Quản lý lỗi bằng try…except
Việc xử lý ngoại lệ là cực kỳ quan trọng để tránh chương trình bị crash. Hãy luôn bao bọc code đọc file trong khối try...except
:
try:
with open('file_khong_ton_tai.txt', 'r', encoding='utf-8') as file:
content = file.read()
print(content)
except FileNotFoundError:
print("Lỗi: File không tồn tại!")
except PermissionError:
print("Lỗi: Không có quyền đọc file!")
except UnicodeDecodeError:
print("Lỗi: Không thể giải mã file!")
Xử lý file lớn hiệu quả
Khi làm việc với file lớn, hãy tránh sử dụng read()
hoặc readlines()
. Thay vào đó, sử dụng vòng lặp for
để đọc từng dòng:

def process_large_file(filename):
with open(filename, 'r', encoding='utf-8') as file:
for line_number, line in enumerate(file, 1):
# Xử lý từng dòng
if line_number % 10000 == 0:
print(f"Đã xử lý {line_number} dòng...")
Phương pháp này cũng liên quan đến vòng lặp trong Python, nơi bạn có thể khám phá thêm cách dùng for, while, break và continue để tối ưu hóa đọc file và xử lý dữ liệu lặp.
Sử dụng with statement
Luôn sử dụng with statement
thay vì open()
và close()
thủ công. Điều này đảm bảo file luôn được đóng đúng cách, ngay cả khi xảy ra lỗi:
# Tốt
with open('data.txt', 'r') as file:
content = file.read()
# Không tốt
file = open('data.txt', 'r')
content = file.read()
file.close()
Xử lý encoding đúng cách
Khi đọc file chứa ký tự tiếng Việt, hãy luôn chỉ định encoding để tránh lỗi:
with open('file_tieng_viet.txt', 'r', encoding='utf-8') as file:
content = file.read()
print(content)
Các tình huống nâng cao
Đọc file nhị phân trong Python
Khi cần đọc file nhị phân như hình ảnh, video, hoặc file thực thi, bạn cần sử dụng chế độ 'rb'
(read binary):

with open('image.jpg', 'rb') as file:
binary_data = file.read()
print(f"Kích thước file: {len(binary_data)} bytes")
print(f"10 byte đầu: {binary_data[:10]}")
Đọc file theo encoding
Việc xử lý encoding rất quan trọng, đặc biệt khi làm việc với file từ nguồn khác nhau:
# Thử các encoding khác nhau
encodings = ['utf-8', 'latin-1', 'cp1252']
for encoding in encodings:
try:
with open('file_da_ngon_ngu.txt', 'r', encoding=encoding) as file:
content = file.read()
print(f"Thành công với encoding: {encoding}")
break
except UnicodeDecodeError:
print(f"Không thể đọc với encoding: {encoding}")
Câu hỏi thường gặp và giải đáp
Làm sao để đọc file lớn mà không gây tràn bộ nhớ?
Sử dụng vòng lặp for
để đọc từng dòng một. Đây là cách hiệu quả nhất:
def read_large_file_safely(filename):
with open(filename, 'r', encoding='utf-8') as file:
for line in file:
# Xử lý từng dòng
process_line(line.strip())
Tôi gặp lỗi mã hóa khi đọc file tiếng Việt, làm thế nào?
Hãy thử các bước sau:
- Chỉ định
encoding='utf-8'
khi mở file
- Nếu vẫn lỗi, thử
encoding='latin-1'
hoặc encoding='cp1252'
- Sử dụng
errors='ignore'
để bỏ qua ký tự lỗi

with open('file_tieng_viet.txt', 'r', encoding='utf-8', errors='ignore') as file:
content = file.read()
Kết luận và tài nguyên học thêm
Qua bài viết này, chúng ta đã cùng tìm hiểu chi tiết về cách đọc file trong Python từ cơ bản đến nâng cao. Các phương pháp chính bao gồm read()
cho file nhỏ, readline()
cho việc đọc tuần tự, readlines()
cho xử lý list, và vòng lặp for
cho hiệu quả tối ưu.
Hãy luôn nhớ những lưu ý quan trọng: sử dụng with statement
để đảm bảo an toàn, áp dụng try...except
để xử lý lỗi, chỉ định encoding đúng cách, và chọn phương pháp phù hợp với kích thước file.

Để nâng cao kỹ năng hơn nữa, tôi khuyên bạn nên thực hành với các file có kích thước và định dạng khác nhau. Hãy thử áp dụng các kỹ thuật này vào dự án thực tế của bạn.
Tiếp theo, bạn có thể tìm hiểu thêm về ghi file, thao tác thư mục và xử lý file JSON, CSV trong Python. Đây là những kỹ năng bổ sung quan trọng giúp bạn trở thành lập trình viên Python toàn diện.

Chúc bạn học tập hiệu quả và thành công trên con đường chinh phục Python! Đừng ngần ngại chia sẻ kinh nghiệm hoặc đặt câu hỏi nếu gặp khó khăn nhé.
Chia sẻ Tài liệu học Python