with open() trong Python: Đọc và Ghi File An Toàn, Đúng Chuẩn
- Home
- with open() trong Python: Đọc và Ghi File An Toàn, Đúng Chuẩn
Khi làm việc với các dự án phần mềm hay xử lý dữ liệu trong Python, thao tác đọc và ghi file là công việc diễn ra hàng ngày. Tuy nhiên, nếu không quản lý việc đóng/mở file cẩn thận, chương trình của bạn rất dễ gặp các lỗi rò rỉ tài nguyên (resource leak), làm treo hệ thống hoặc hư hại dữ liệu.
Trong bài viết này, hãy cùng DCSoftTech tìm hiểu về cú pháp with open() – giải pháp chuẩn mực giúp bạn đọc và ghi file an toàn tuyệt đối trong Python.
open() và close())Thông thường, khi mới học Python, bạn có thể quen với cách mở và đóng file như sau:
file = open("data.txt", "r")
content = file.read()
# Thao tác xử lý dữ liệu...
file.close()
Rủi ro là gì?
Nếu trong quá trình xử lý dữ liệu giữa câu lệnh open() và close() xảy ra một ngoại lệ (Exception) khiến chương trình bị ngắt đột ngột, lệnh file.close() sẽ không bao giờ được gọi. Kết quả là file vẫn bị khóa, gây tốn bộ nhớ hệ thống và có thể làm hỏng dữ liệu.
with open() (Context Manager)with open() sử dụng cơ chế Context Manager của Python. Nó tự động quản lý việc đóng file ngay khi bạn hoàn thành các thao tác bên trong khối lệnh, kể cả khi có lỗi xảy ra.
with open("ten_file.txt", "chế_độ", encoding="utf-8") as file:
# Thực hiện thao tác với file tại đây
data = file.read()
# Sau khi thoát khỏi khối lệnh with, file tự động được đóng an toàn.
Tip từ DCSoftTech: Luôn khai báo tham số
encoding="utf-8"khi làm việc với file văn bản để tránh lỗi hiển thị tiếng Việt hoặc các ký tự đặc biệt trên các hệ điều hành khác nhau (Windows, Linux, macOS).
mode="r")Đọc toàn bộ nội dung:
with open("danh_sach.txt", "r", encoding="utf-8") as f:
content = f.read()
print(content)
Đọc từng dòng (tối ưu bộ nhớ cho file lớn):
with open("log.txt", "r", encoding="utf-8") as f:
for line in f:
print(line.strip()) # strip() để xóa ký tự xuống dòng \n
mode="w")Lưu ý: Chế độ "w" sẽ xóa toàn bộ nội dung cũ của file nếu file đã tồn tại.
with open("output.txt", "w", encoding="utf-8") as f:
f.write("DCSoftTech - Giải pháp công nghệ hàng đầu\n")
f.write("Tips Python: Đọc ghi file an toàn.")
mode="a")Chế độ "a" (Append) giữ nguyên nội dung cũ và ghi thêm dữ liệu mới vào cuối file.
with open("log.txt", "a", encoding="utf-8") as f:
f.write("Thêm dòng log mới vào hệ thống.\n")
| Mode | Ý nghĩa | Hành vi |
"r" |
Read (Mặc định) | Chỉ đọc. Báo lỗi nếu file không tồn tại. |
"w" |
Write | Ghi file. Tạo file mới nếu chưa có, ghi đè nếu đã có. |
"a" |
Append | Ghi tiếp vào cuối file. Tạo file mới nếu chưa có. |
"r+" |
Read & Write | Vừa đọc vừa ghi trên file hiện có. |
"rb" / "wb" |
Binary Read/Write | Đọc/Ghi dữ liệu nhị phân (hình ảnh, audio, file .pdf…). |
Sử dụng with open() là quy tắc lập trình sạch (Clean Code) mà bất kỳ Python Developer nào cũng cần nắm vững. Nó không chỉ giúp mã nguồn của bạn ngắn gọn, chuyên nghiệp hơn mà còn loại bỏ hoàn toàn nguy cơ rò rỉ tài nguyên hệ thống.
Hy vọng mẹo nhỏ này từ DCSoftTech sẽ giúp ích cho bạn trong quá trình phát triển ứng dụng với Python!