Ảnh giới thiệu Series Học Python từ A đến Z

Học Python cơ bản từ A đến Z cho người mới bắt đầu (Bài 14)

Module 6: Xử Lý Lỗi & Tương Tác Tệp

Bài 14: Làm Việc Với Tệp: Lưu Trữ Dữ Liệu Quan Trọng.

Làm Việc Với Tệp, Học Python cơ bản từ A đến Z cho người mới bắt đầu

Mục tiêu:

Sau khi đã trang bị “áo giáp” xử lý lỗi cho chương trình, đã đến lúc chúng ta học cách lưu trữ những thông tin quý giá mà chương trình thu thập được. Bài học này sẽ hướng dẫn bạn cách tương tác với các tệp trên máy tính: mở, đọc, ghi và quản lý chúng một cách an toàn. Đây là kỹ năng nền tảng để chương trình của bạn có thể “ghi nhớ” và “chia sẻ” dữ liệu, vượt ra ngoài giới hạn của bộ nhớ tạm thời.

1. Mở Đầu

Hãy tưởng tượng bạn là một chuyên gia dữ liệu trên một trạm vũ trụ, nhận về hàng terabyte dữ liệu từ các cảm biến thiên văn và các cuộc thám hiểm hành tinh. Nếu bạn chỉ có thể xử lý dữ liệu này trong bộ nhớ khi chương trình đang chạy, thì khi bạn tắt máy, tất cả sẽ biến mất! Làm thế nào để lưu trữ những phát hiện lịch sử đó một cách an toàn? Làm thế nào để phân tích chúng sau này, hoặc chia sẻ với các nhà khoa học khác?

Đó chính là lúc chúng ta cần đến Tệp (Files)! Tệp là cánh cửa để chương trình của bạn tương tác với thế giới bên ngoài, lưu trữ dữ liệu một cách bền vững trên ổ cứng hoặc các thiết bị lưu trữ khác.

Trong bài học này, bạn sẽ học cách:

• Mở và đóng tệp một cách an toàn để đọc hoặc ghi dữ liệu.

• Đọc nội dung từ tệp văn bản, từng dòng hoặc toàn bộ.

• Ghi dữ liệu vào tệp văn bản, tạo ra các nhật ký, báo cáo, hoặc lưu trữ cấu hình.

• Sử dụng cú pháp with open() để quản lý tệp một cách tự động và hiệu quả.

Sau bài học này, chương trình của bạn sẽ không còn là một “nhà kho” tạm thời nữa, mà sẽ trở thành một “thư viện” vững chắc, có khả năng lưu trữ và truy xuất mọi thông tin quan trọng!

2. Lý Thuyết & Khái Niệm (HaivanStory’s Voice):

Trong các câu chuyện về du hành vũ trụ, những nhật ký phi hành đoàn, bản đồ thiên hà hay các báo cáo khoa học đều được lưu trữ cẩn thận. Chúng không chỉ tồn tại trong bộ nhớ ngắn hạn của con tàu mà phải được ghi lại vào các “hộp đen” hoặc “máy chủ dữ liệu” để đảm bảo tính bền vững và khả năng truy xuất. Trong Python, tệp chính là những “hộp đen” hay “máy chủ” đó.

Tại sao cần làm việc với tệp?

• Tính bền vững (Persistence): Dữ liệu được lưu trữ trong tệp sẽ không bị mất khi chương trình kết thúc hoặc máy tính tắt nguồn.

• Chia sẻ dữ liệu: Tệp là cách phổ biến để chia sẻ dữ liệu giữa các chương trình hoặc giữa những người dùng khác nhau.

• Xử lý dữ liệu lớn: Khi dữ liệu quá lớn để chứa trong bộ nhớ, chúng ta có thể đọc và xử lý từng phần từ tệp.

1. Mở Tệp (Opening a File): open()

Trước khi bạn có thể đọc hoặc ghi vào một tệp, bạn phải “mở” nó. Hàm open() được sử dụng để làm điều này. Nó trả về một “đối tượng tệp” (file object) hay còn gọi là “tay cầm tệp” (file handle), mà bạn sẽ sử dụng để thực hiện các thao tác tiếp theo.

Cú pháp: file_object = open(filename, mode)

• filename: Tên của tệp (bao gồm cả đường dẫn nếu tệp không ở cùng thư mục với script của bạn).

• mode: Chế độ mở tệp. Một số chế độ phổ biến:

• ‘r’ (read): Mở tệp để đọc (mặc định). Tệp phải tồn tại.

• ‘w’ (write): Mở tệp để ghi. Nếu tệp đã tồn tại, nội dung cũ sẽ bị xóa. Nếu tệp không tồn tại, một tệp mới sẽ được tạo.

• ‘a’ (append): Mở tệp để ghi tiếp (nối thêm). Dữ liệu mới sẽ được ghi vào cuối tệp mà không xóa nội dung cũ. Nếu tệp không tồn tại, một tệp mới sẽ được tạo.

• ‘x’ (exclusive creation): Mở tệp để tạo và ghi. Nếu tệp đã tồn tại, sẽ báo lỗi.

• ‘t’ (text mode): Chế độ văn bản (mặc định).

• ‘b’ (binary mode): Chế độ nhị phân (dùng cho hình ảnh, video…).

Ví dụ:

# Mở tệp để đọc (read mode)
try:
    fhand_doc = open('nhat_ky_phi_hanh.txt', 'r')
    print("Tệp 'nhat_ky_phi_hanh.txt' đã được mở để đọc.")
    fhand_doc.close() # Quan trọng: Luôn đóng tệp khi hoàn tất
except FileNotFoundError:
    print("Lỗi: Tệp 'nhat_ky_phi_hanh.txt' không tìm thấy.")

# Mở tệp để ghi (write mode) - CẨN THẬN: sẽ xóa nội dung cũ!
fhand_ghi = open('bao_cao_nang_luong.txt', 'w')
print("Tệp 'bao_cao_nang_luong.txt' đã được mở để ghi.")
fhand_ghi.close()

# Mở tệp để nối thêm (append mode)
fhand_noi_them = open('ghi_chu_nhiem_vu.txt', 'a')
print("Tệp 'ghi_chu_nhiem_vu.txt' đã được mở để nối thêm.")
fhand_noi_them.close()

2. Đọc Tệp (Reading from Files):

Sau khi mở tệp ở chế độ đọc, bạn có thể đọc nội dung của nó:

• Đọc toàn bộ tệp: file_object.read() trả về toàn bộ nội dung dưới dạng một chuỗi lớn.

• Đọc từng dòng:

• Dùng vòng lặp for để duyệt qua từng dòng trong tệp (phổ biến nhất).

• file_object.readline() đọc một dòng tại một thời điểm.

• file_object.readlines() đọc tất cả các dòng vào một danh sách các chuỗi.

Ví dụ:

# Giả sử có một tệp 'thong_tin_tau.txt' với nội dung:
# Ten tau: Voyager 1
# Toc do: 17 km/s
# Nhiem vu: Tham hiem vu tru

# Đọc từng dòng
try:
    with open('thong_tin_tau.txt', 'r') as f:
        print("\nĐọc từng dòng từ tệp:")
        for line in f:
            print(line.rstrip()) # rstrip() để loại bỏ ký tự xuống dòng
except FileNotFoundError:
    print("Tệp 'thong_tin_tau.txt' không tìm thấy.")

# Đọc toàn bộ tệp
try:
    with open('thong_tin_tau.txt', 'r') as f:
        noi_dung = f.read()
        print("\nĐọc toàn bộ nội dung từ tệp:")
        print(noi_dung)
except FileNotFoundError:
    pass # Đã xử lý ở trên

3. Ghi Tệp (Writing to Files):

Để ghi dữ liệu vào tệp, bạn cần mở tệp ở chế độ ghi (‘w’) hoặc nối thêm (‘a’). Sau đó, sử dụng phương thức write():

• file_object.write(string): Ghi một chuỗi vào tệp. Lưu ý: write() không tự động thêm ký tự xuống dòng mới (\n). Bạn phải thêm nó vào chuỗi nếu muốn dữ liệu nằm trên các dòng riêng biệt.

Ví dụ:

# Ghi dữ liệu vào tệp (ghi đè nếu tệp tồn tại)
with open('bao_cao_nhiem_vu.txt', 'w') as f:
    f.write("Báo cáo Nhiệm vụ Alpha Centauri:\n")
    f.write("Ngày: 2025-06-11\n")
    f.write("Tình trạng: Hoàn thành tốt đẹp.\n")
    print("\nĐã ghi báo cáo nhiệm vụ.")

# Nối thêm dữ liệu vào tệp
with open('bao_cao_nhiem_vu.txt', 'a') as f:
    f.write("Ghi chú: Đã phát hiện tín hiệu lạ từ hành tinh X-7.\n")
    print("Đã thêm ghi chú vào báo cáo.")

4. Sử dụng with open() (Context Manager):

Đây là cách được khuyến nghị nhất để làm việc với tệp trong Python. with open() hoạt động như một “quản lý ngữ cảnh” (context manager) và tự động đóng tệp cho bạn, ngay cả khi có lỗi xảy ra. Điều này giúp tránh rò rỉ tài nguyên và làm code sạch hơn.

# Ví dụ với with open()
print("\nSử dụng 'with open()' để đảm bảo tệp được đóng:")
try:
    with open('thong_tin_tau.txt', 'r') as file_tau:
        for dong in file_tau:
            print(f"Dữ liệu tàu: {dong.strip()}")
except FileNotFoundError:
    print("Tệp 'thong_tin_tau.txt' không tồn tại.")

Coursera Videos (Tích hợp):

Để có cái nhìn trực quan và sâu sắc hơn về việc xử lý tệp trong Python, bạn có thể tham khảo các video sau từ khóa học “Python for Everybody” của Đại học Michigan trên Coursera:

7.1 Files:

• Video này sẽ giới thiệu tổng quan về tệp và cách Python tương tác với chúng, bao gồm khái niệm về “file handle”.

7.2 Processing Files:

• Đi sâu vào cách đọc từng dòng trong tệp bằng vòng lặp for.

Demonstration: Worked Exercise 7.1:

• Một ví dụ thực tế được giải quyết từng bước, giúp bạn củng cố kiến thức.

Tài liệu tham khảo thêm:

• Files.pdf (file đính kèm)

• Bài 7.docx (file đính kèm)

• Processing Files.pdf (file đính kèm)

3. Thực Hành & Vận Dụng

Hãy biến kiến thức thành hành động và xây dựng khả năng lưu trữ dữ liệu cho chương trình của bạn!

Google Colab (Thực hành cốt lõi):

[Link Google Colab Bài 12 (Tự tạo)]

Notebook sẽ bao gồm:

• Các đoạn code mẫu (Code Examples) minh họa:

• Mở tệp ở các chế độ khác nhau (‘r’, ‘w’, ‘a’).

• Đọc toàn bộ nội dung và đọc từng dòng.

• Ghi dữ liệu vào tệp.

• Sử dụng with open() để đọc và ghi.

• Kết hợp try-except với việc mở tệp để xử lý FileNotFoundError.

• Các bài tập nhỏ, có hướng dẫn (Guided Exercises):

• Nhiệm vụ: Nhật Ký Phi Hành Đoàn:

• Tạo một hàm ghi_nhat_ky(noi_dung_nhat_ky) nhận vào một chuỗi và ghi chuỗi đó (cùng với dấu thời gian hiện tại) vào một tệp có tên nhat_ky_phi_hanh_doan.txt ở chế độ nối thêm (‘a’).

• Sử dụng hàm này để ghi lại một vài sự kiện trong chuyến bay (ví dụ: “Đã đi vào trường thiên thạch”, “Năng lượng hệ thống chính giảm 5%”).

• Viết một hàm doc_toan_bo_nhat_ky() để đọc và in ra toàn bộ nội dung của tệp nhật ký đó.

• Thử thách: Hệ Thống Cấu Hình Tàu Vũ Trụ:

• Tạo một tệp config_tau.txt với nội dung ví dụ:
ten_tau=Enterprise
toc_do_toi_da=0.9c
tinh_trang_buong_lai=OK

• Viết một chương trình Python để đọc tệp này.

• Phân tích từng dòng để lấy ra tên thuộc tính và giá trị của nó, lưu trữ chúng vào một từ điển Python.

• In ra từ điển đó. (Gợi ý: Dùng split(‘=’) và strip()).

SoloLearn Quiz (Kiểm tra nhanh):

Sau khi thực hành trên Colab, hãy kiểm tra nhanh kiến thức của bạn với bài quiz này trên SoloLearn. Tìm kiếm các bài về “File Handling” hoặc “Files” trong phần Python Introduction hoặc Intermediate: [Link Quiz SoloLearn (SoloLearn Python Introduction course)]

4. Câu Chuyện HaivanStory & Liên Hệ Thực Tế:

“Trong các bộ phim khoa học viễn tưởng, chúng ta thường thấy những cảnh các phi công tải dữ liệu vào hệ thống tàu, hoặc các AI truy cập vào kho dữ liệu khổng lồ. Đó chính là việc tương tác với tệp!

Trong thế giới thực của AI và Khoa học Dữ liệu, việc làm việc với tệp là công việc hàng ngày. Các tập dữ liệu lớn (dataset) cho huấn luyện mô hình học máy thường được lưu trữ trong các tệp văn bản (.csv, .txt), hoặc các định dạng khác như .json, .parquet. Các mô hình AI sau khi được huấn luyện cũng thường được lưu lại vào tệp (.pkl, .h5) để có thể sử dụng lại mà không cần huấn luyện lại từ đầu.

Khi bạn xây dựng một chatbot AI, lịch sử trò chuyện của người dùng có thể được ghi vào một tệp. Khi bạn phân tích dữ liệu thị trường chứng khoán, dữ liệu lịch sử giá được đọc từ các tệp. Ngay cả khi bạn cấu hình một hệ thống AI phức tạp, các cài đặt thường được lưu trữ trong các tệp cấu hình. Tương tác với tệp là nền tảng để biến các thuật toán và mô hình của bạn thành những ứng dụng có thể ‘ghi nhớ’ và hoạt động bền vững trong mọi môi trường.”

5. Tổng Kết & Hướng Đi Tiếp Theo:

Trong Bài 14 này, bạn đã học được cách chương trình Python của mình có thể tương tác với thế giới bên ngoài thông qua Tệp (Files). Bạn đã nắm vững:

• Mục đích và lợi ích của việc sử dụng tệp.

• Các chế độ mở tệp (‘r’, ‘w’, ‘a’).

• Cách đọc dữ liệu từ tệp (toàn bộ hoặc từng dòng).

• Cách ghi dữ liệu vào tệp.

• Tầm quan trọng và cách sử dụng with open() để quản lý tệp an toàn và hiệu quả.

Giờ đây, chương trình của bạn không chỉ có thể xử lý lỗi mà còn có thể lưu trữ và truy xuất thông tin một cách bền vững. Đây là một bước tiến quan trọng trong việc xây dựng các ứng dụng thực tế.

Trong bài học tiếp theo, chúng ta sẽ bắt đầu khám phá một khía cạnh mới và thú vị: Web Scraping (Thu thập dữ liệu từ website). Bạn sẽ học cách sử dụng Python để “đọc” và “trích xuất” thông tin từ các trang web, biến Internet thành một “kho dữ liệu” khổng lồ phục vụ cho mục đích của bạn.

6. Kêu Gọi Hành Động (Call to Action):

Bạn có ý tưởng nào về cách sử dụng tệp trong dự án Python tiếp theo của mình không? Bạn đã từng gặp khó khăn nào khi làm việc với tệp và cách bạn xử lý chúng? Hãy chia sẻ kinh nghiệm hoặc câu hỏi của bạn trong phần bình luận bên dưới nhé!

Đừng quên theo dõi HaivanStory Blog để không bỏ lỡ Bài tiếp theo về Trích xuất Dữ liệu Từ Web (Web Scraping): Thám Hiểm ‘Đại Dương Thông Tin’ Internet nhé.

Nếu bạn thấy bài viết này hữu ích, hãy chia sẻ nó với bạn bè và đồng đội để cùng nhau xây dựng những ứng dụng Python mạnh mẽ hơn!