Giới thiệu về ghi dữ liệu vào file trong Python

Bạn có bao giờ cần lưu thông tin ra file khi lập trình Python không? Đây là một tình huống rất phổ biến mà mọi lập trình viên đều gặp phải. Việc ghi file giúp chúng ta lưu trữ dữ liệu một cách bền vững, tái sử dụng thông tin và xử lý dữ liệu hiệu quả hơn.
Trong thế giới lập trình hiện đại, việc quản lý file là một kỹ năng không thể thiếu. Từ việc lưu kết quả tính toán, ghi log hệ thống, đến xuất báo cáo – tất cả đều cần đến khả năng ghi dữ liệu vào file. Python cung cấp cho chúng ta những công cụ mạnh mẽ và dễ sử dụng để thực hiện điều này.
Bài viết này sẽ giải thích chi tiết cách ghi file trong Python, các chế độ phổ biến và ví dụ minh họa thực tế. Bạn sẽ học được cách sử dụng các hàm write()
và writelines()
, hiểu rõ các chế độ mở file khác nhau, và nắm vững cách quản lý file một cách an toàn và hiệu quả.
Các bước cơ bản để ghi dữ liệu vào file trong Python
Mở file và chọn chế độ ghi

Trước khi có thể ghi dữ liệu vào file, bạn cần mở file với chế độ phù hợp. Python cung cấp ba chế độ ghi chính: "w"
(write – ghi đè), "a"
(append – thêm vào cuối), và "x"
(exclusive creation – tạo mới độc quyền).
Chế độ "w"
sẽ tạo file mới nếu file chưa tồn tại, hoặc xóa toàn bộ nội dung file cũ nếu đã tồn tại. Chế độ "a"
giúp bạn thêm dữ liệu vào cuối file mà không làm mất nội dung cũ. Còn chế độ "x"
chỉ tạo file mới và báo lỗi nếu file đã tồn tại.
Bạn có thể tìm hiểu sâu hơn về kiểu dữ liệu trong Python để hiểu rõ hơn cách dữ liệu được xử lý khi ghi file.
Ghi dữ liệu và đóng file
Sau khi mở file, bạn có thể sử dụng hàm write()
để ghi một chuỗi hoặc writelines()
để ghi nhiều dòng cùng lúc. Việc đóng file sau khi hoàn tất là rất quan trọng để giải phóng tài nguyên hệ thống.
Tuy nhiên, thay vì phải nhớ đóng file thủ công, Python cung cấp cấu trúc with
giúp tự động đóng file ngay cả khi có lỗi xảy ra. Điều này đảm bảo chương trình của bạn hoạt động ổn định và không bị rò rỉ tài nguyên.
Để hiểu kỹ hơn cách sử dụng cấu trúc lặp, bạn có thể tham khảo bài viết về vòng lặp trong Python để biết thêm các kỹ thuật tiện ích khi xử lý dữ liệu lặp.
Phân biệt các chế độ mở file trong Python
Chế độ “w” (write) – ghi đè file mới hoặc cũ

Chế độ "w"
là chế độ được sử dụng nhiều nhất khi bạn muốn tạo file mới hoặc thay thế hoàn toàn nội dung file cũ. Khi mở file với chế độ này, Python sẽ xóa sạch mọi dữ liệu hiện có trong file.
with open("dulieu.txt", "w", encoding="utf-8") as f:
f.write("Đây là nội dung mới")
Bạn cần cẩn thận khi sử dụng chế độ này vì nó có thể làm mất dữ liệu quan trọng. Hãy chắc chắn rằng bạn thực sự muốn ghi đè file trước khi sử dụng chế độ "w"
.
Chế độ “a” (append) – thêm dữ liệu vào cuối file
Chế độ "a"
rất hữu ích khi bạn muốn thêm thông tin mới mà không làm mất dữ liệu cũ. Điều này đặc biệt quan trọng khi ghi log hoặc cập nhật file báo cáo.
with open("nhat_ky.txt", "a", encoding="utf-8") as f:
f.write("Dòng mới được thêm vào\n")
Chế độ này thường được sử dụng trong các ứng dụng ghi log, nơi bạn cần theo dõi lịch sử hoạt động của hệ thống mà không muốn mất thông tin cũ.
Chế độ “x” (exclusive creation) – tạo file mới, báo lỗi nếu file tồn tại

Chế độ "x"
giúp bạn tránh việc vô tình ghi đè lên file quan trọng. Nếu file đã tồn tại, Python sẽ ném ra lỗi FileExistsError
, giúp bạn phát hiện và xử lý tình huống này.
try:
with open("file_moi.txt", "x", encoding="utf-8") as f:
f.write("File được tạo mới")
except FileExistsError:
print("File đã tồn tại!")
Cách dùng write() và writelines() trong ghi file
Hàm write() ghi một chuỗi đơn giản

Hàm write()
là cách cơ bản nhất để ghi dữ liệu vào file. Nó nhận một chuỗi làm tham số và ghi nội dung đó vào file. Lưu ý rằng write()
không tự động thêm ký tự xuống dòng.
with open("van_ban.txt", "w", encoding="utf-8") as f:
f.write("Dòng đầu tiên")
f.write("Dòng thứ hai") # Sẽ nối liền với dòng trước
Để tạo dòng mới, bạn cần thêm ký tự \n
vào cuối chuỗi hoặc sử dụng hàm print()
với tham số file
.
Hàm writelines() ghi một danh sách dòng
Hàm writelines()
cho phép bạn ghi nhiều dòng cùng một lúc từ một danh sách hoặc iterable. Tuy nhiên, giống như write()
, nó cũng không tự động thêm ký tự xuống dòng.
cac_dong = ["Dòng 1\n", "Dòng 2\n", "Dòng 3\n"]
with open("nhieu_dong.txt", "w", encoding="utf-8") as f:
f.writelines(cac_dong)
Điều quan trọng cần nhớ là writelines()
chỉ chấp nhận iterable chứa các chuỗi, không phải các kiểu dữ liệu khác.
Quản lý file an toàn với with statement

Câu lệnh with
là một trong những tính năng quan trọng nhất khi làm việc với file trong Python. Nó đảm bảo file luôn được đóng đúng cách, ngay cả khi có lỗi xảy ra trong quá trình xử lý.
Khi sử dụng with open(...) as f:
, Python tự động gọi phương thức close()
khi thoát khỏi khối code, giúp giải phóng tài nguyên hệ thống và tránh các vấn đề tiềm ẩn như file bị khóa hoặc dữ liệu chưa được ghi hoàn toàn.
# Cách an toàn
with open("file_an_toan.txt", "w", encoding="utf-8") as f:
f.write("Nội dung được ghi an toàn")
# File tự động được đóng tại đây
# Cách không an toàn (không khuyến khích)
f = open("file_khong_an_toan.txt", "w", encoding="utf-8")
f.write("Nội dung")
f.close() # Có thể quên đóng hoặc không thực hiện nếu có lỗi
Ví dụ thực tế: Ghi file text và file nhị phân
Ghi file text với “w”

File text là loại file phổ biến nhất mà bạn sẽ làm việc. Chúng chứa dữ liệu dạng ký tự có thể đọc được bằng mắt thường.
du_lieu_sinh_vien = """Họ tên: Nguyễn Văn An
Tuổi: 20
Lớp: CNTT01
Điểm TB: 8.5"""
with open("thong_tin_sinh_vien.txt", "w", encoding="utf-8") as f:
f.write(du_lieu_sinh_vien)
Ghi file nhị phân với “wb”
File nhị phân chứa dữ liệu dạng bytes và thường được sử dụng cho hình ảnh, video, hoặc các file thực thi. Khi ghi file nhị phân, bạn cần sử dụng chế độ "wb"
và dữ liệu phải ở dạng bytes.
du_lieu_nhi_phan = b'\x89PNG\r\n\x1a\n\x00\x00\x00\r'
with open("du_lieu.bin", "wb") as f:
f.write(du_lieu_nhi_phan)
Sự khác biệt chính giữa "w"
và "wb"
là kiểu dữ liệu: text mode chấp nhận chuỗi string, trong khi binary mode yêu cầu dữ liệu bytes.
Các lỗi thường gặp khi ghi file và cách xử lý
Lỗi file không tồn tại hoặc quyền truy cập bị từ chối

Khi làm việc với file, bạn có thể gặp các lỗi như FileNotFoundError
, PermissionError
, hoặc OSError
. Việc xử lý các ngoại lệ này giúp chương trình hoạt động ổn định.
try:
with open("/duong_dan_khong_ton_tai/file.txt", "w") as f:
f.write("Nội dung")
except FileNotFoundError:
print("Không tìm thấy đường dẫn")
except PermissionError:
print("Không có quyền ghi file")
except OSError as e:
print(f"Lỗi hệ thống: {e}")
Ghi file bị lỗi do dữ liệu không đúng kiểu hoặc thiếu đóng file
Một lỗi phổ biến là cố gắng ghi dữ liệu không phải string vào file text mode hoặc quên đóng file. Sử dụng with
statement giúp tránh hầu hết các vấn đề này.
# Lỗi: Ghi số vào file text
try:
with open("so_lieu.txt", "w") as f:
f.write(123) # Lỗi!
except TypeError:
print("Cần chuyển đổi số thành chuỗi")
# Cách đúng
with open("so_lieu.txt", "w") as f:
f.write(str(123))
Mẹo tối ưu và best practices khi ghi file với Python

Để ghi file hiệu quả và an toàn, hãy luôn tuân thủ các nguyên tắc sau: Đầu tiên, luôn sử dụng with
statement để quản lý file tự động. Điều này đảm bảo file được đóng đúng cách ngay cả khi có lỗi xảy ra.
Thứ hai, chọn đúng chế độ mở file theo nhu cầu thực tế. Sử dụng "w"
khi muốn tạo mới hoặc ghi đè, "a"
khi muốn thêm nội dung, và "x"
khi cần đảm bảo file chưa tồn tại.
Thứ ba, luôn kiểm tra sự tồn tại của file trước khi ghi ở chế độ "x"
để tránh lỗi không mong muốn. Sử dụng os.path.exists()
hoặc pathlib.Path.exists()
để kiểm tra.
Thứ tư, xử lý ngoại lệ một cách thích hợp để chương trình không bị dừng đột ngột. Sử dụng try-except block để bắt và xử lý các lỗi có thể xảy ra.
Cuối cùng, tránh ghi dữ liệu quá lớn trong một lần. Thay vào đó, chia nhỏ dữ liệu thành các phần nhỏ hơn để tránh tràn bộ nhớ và cải thiện hiệu suất.
Bạn cũng có thể nghiên cứu thêm về các hàm trong Python để viết mã ghi file linh hoạt và tái sử dụng hiệu quả hơn.
Kết luận

Ghi file trong Python tuy đơn giản nhưng đòi hỏi bạn phải hiểu rõ các chế độ mở file và cách sử dụng các hàm ghi phù hợp. Từ việc chọn chế độ "w"
, "a"
, hay "x"
cho đến việc sử dụng write()
và writelines()
, mỗi công cụ đều có vai trò và ứng dụng riêng.
Việc sử dụng with
statement không chỉ giúp code của bạn sạch đẹp hơn mà còn đảm bảo an toàn về tài nguyên. Đây là một thói quen tốt mà mọi lập trình viên Python nên áp dụng.
Thông qua các ví dụ thực tế trong bài viết, bạn đã thấy cách áp dụng kiến thức vào các tình huống cụ thể. Từ việc ghi thông tin sinh viên đến xử lý file nhị phân, mỗi trường hợp đều có những điểm cần lưu ý riêng.
Hãy áp dụng những kiến thức này vào dự án của bạn và không ngừng thực hành để thành thạo hơn. Theo dõi các bài viết khác trên BUIMANHDUC.COM để tiếp tục nâng cao kỹ năng lập trình Python và khám phá thêm nhiều chủ đề thú vị khác như ứng dụng của Python, phần tử HTML, và thẻ img trong HTML.
Đồng thời, bạn có thể tải bộ chìa sẻ Tài liệu học Python do Bùi Mạnh Đức cung cấp hoàn toàn miễn phí để hỗ trợ hành trình học tập của mình.