Trong bài này chúng ta sẽ cùng tìm hiểu cách đọc và ghi file trong ngôn ngữ lập trình Python: mở file, đọc, ghi, ghi tiếp và đóng file.
Mọi biến trong chương trình đều nằm trên RAM, chương trình tắt là dữ liệu mất sạch. Muốn lưu lại kết quả, cấu hình hay log để lần sau mở ra vẫn còn thì phải ghi xuống file. Giống như chiếc điều hòa nhà bạn: tắt điện rồi bật lại vẫn nhớ nhiệt độ 27 độ, vì setting đã được lưu vào bộ nhớ không bị mất khi mất điện. Python làm việc với file rất gọn, chỉ vài dòng là xong nhé.
Giới thiệu về File trong Python
File (tệp) là nơi lưu dữ liệu lâu dài trên ổ đĩa. Có nhiều loại file như file văn bản, file dữ liệu, file ảnh, video… nhưng xét cho cùng, máy tính lưu tất cả dưới dạng chuỗi nhị phân.
Mỗi file được đặt tên và nằm ở một vị trí cụ thể trên ổ đĩa. Khác với RAM sẽ mất dữ liệu khi tắt máy, dữ liệu trong file vẫn còn nguyên. Vì vậy khi cần lưu dữ liệu để dùng lại về sau, chúng ta ghi nó ra file.

Những thao tác đối với file trong Python
Làm việc với file luôn theo 3 bước:
- Mở file.
- Đọc hoặc ghi file.
- Đóng file để giải phóng tài nguyên.
1. Làm sao để mở file trong Python?
Để mở file, chúng ta dùng hàm open() với 2 tham số chính: tên file và chế độ mở (mode). Mở với mode='r' (read) để đọc, sau đó dùng phương thức read() để lấy nội dung.

Ví dụ: mở file example.txt, đọc nội dung và in ra màn hình.
file = open('example.txt', mode='r')
content = file.read()
print(content)
file.close()
Muốn ghi vào file thì mở với mode='w' (write) và dùng phương thức write().
Ví dụ:
file = open('example.txt', mode='w')
file.write('Hello, World!')
file.close()
Nếu file chưa tồn tại, mở ở chế độ 'w' sẽ tự tạo file mới. Còn nếu muốn ghi thêm vào cuối file mà không làm mất nội dung cũ thì dùng mode='a' (append).
Tóm tắt các chế độ hay dùng:
'r': chỉ đọc, file phải có sẵn, không có sẽ báo lỗiFileNotFoundError.'w': ghi mới, xóa hết nội dung cũ nếu file đã có.'a': ghi tiếp vào cuối file.'r+': vừa đọc vừa ghi.
2. Cách đọc và ghi file trong Python
Quy trình chung là: dùng open() mở file với chế độ phù hợp, sau đó gọi các phương thức của đối tượng file như read(), write() để xử lý nội dung.

Ví dụ: đọc nội dung file example.txt và in ra màn hình.
# Mở file với chế độ đọc
file = open('example.txt', mode='r')
# Đọc nội dung của file và lưu vào biến content
content = file.read()
# In nội dung của file ra màn hình
print(content)
# Đóng file
file.close()
Sau đó, ghi nội dung mới vào file example.txt:
# Mở file với chế độ ghi
file = open('example.txt', mode='w')
# Ghi nội dung vào file
file.write('Hello, World!')
# Đóng file
file.close()
Muốn vừa đọc vừa ghi trên cùng một file thì dùng chế độ 'r+'.
Ví dụ:
# Mở file với chế độ đọc và ghi
file = open('example.txt', mode='r+')
# Đọc nội dung của file và in ra màn hình
content = file.read()
print(content)
# Ghi thêm nội dung vào file
file.write('\nHow are you?')
# Đóng file
file.close()
Sau khi read() đọc hết file, con trỏ file nằm ở cuối, nên lệnh write() sẽ ghi tiếp vào cuối file.
Lưu ý: Chế độ 'w' sẽ xóa sạch nội dung cũ ngay lúc mở file, kể cả khi bạn chưa kịp ghi gì. Mở nhầm 'w' thay vì 'a' với file log hay file dữ liệu quan trọng là mất trắng. Chỉ ghi thêm thì luôn dùng 'a' nhé.
Lưu ý: Trên Windows, file chứa tiếng Việt có dấu nếu mở mà không chỉ định encoding thì rất hay bị lỗi UnicodeDecodeError hoặc ra ký tự lạ. Hãy luôn mở kèm encoding='utf-8', ví dụ open('example.txt', mode='r', encoding='utf-8').
3. Đóng file trong Python
Đọc ghi xong thì phải đóng file bằng phương thức close(). Nếu không đóng, file có thể bị khóa không cho chương trình khác mở, và dữ liệu ghi có thể chưa được đẩy hết xuống ổ đĩa.
Ví dụ: mở, đọc rồi đóng file.
# Mở file với chế độ đọc
file = open('example.txt', mode='r')
# Đọc nội dung của file
content = file.read()
# In nội dung của file ra màn hình
print(content)
# Đóng file
file.close()
Vấn đề là nếu có lỗi xảy ra giữa chừng, chương trình dừng trước dòng close() và file không bao giờ được đóng. Cách mà mọi người hay dùng trong thực tế là câu lệnh with, Python sẽ tự đóng file khi ra khỏi khối lệnh, kể cả khi có lỗi:
with open('example.txt', mode='r', encoding='utf-8') as file:
content = file.read()
print(content)
# Ra khỏi khối with là file tự đóng, không cần gọi close()
Tổng kết
Đọc ghi file trong Python chỉ xoay quanh hàm open(), các phương thức read(), write(), close() và các chế độ 'r', 'w', 'a', 'r+'. Thực tế thì các bạn nên tập thói quen dùng with và luôn ghi rõ encoding='utf-8', sẽ tránh được phần lớn lỗi liên quan đến file.
Nếu thấy bài viết này có ích hãy chia sẻ với bạn bè nhé. Bài tiếp theo chúng ta sẽ làm quen với thư viện NumPy.

