🐍 Ngày 32: Python hằng ngày 365 ngày - Quản lý To-Do List với CSV
Phần 2: Đánh dấu hoàn thành và ghi lại
🎯 Mục tiêu
- Đọc và ghi dữ liệu từ file .csv.
- Cập nhật trạng thái công việc trong file.
- Đánh dấu công việc là "Done".
- Làm quen với thao tác ghi đè file CSV trong Python.
📚 Nội dung chính
Hôm nay, chúng ta sẽ:
- Đọc danh sách công việc từ file CSV (tasks.csv).
- Hiển thị danh sách cho người dùng chọn.
- Cho phép đánh dấu 1 task là "Done".
- Ghi kết quả trở lại vào file CSV.
🧠 Lưu ý kiến thức
- Sử dụng csv.DictReader() để đọc file.
- Sử dụng csv.DictWriter() để ghi lại.
- Ghi đè file sẽ xóa toàn bộ nội dung cũ, nên cần ghi lại toàn bộ danh sách sau khi chỉnh sửa.
🧪 Ví dụ file tasks.csv
Task,Status Chao co,Pending Post Fanpage,Done Post Group,Pending
🧑💻 Code mẫu
import csv filename = "tasks.csv" # Đọc danh sách từ file def read_tasks(): tasks = [] with open(filename, mode='r', encoding='utf-8') as file: reader = csv.DictReader(file) for row in reader: tasks.append(row) return tasks # Ghi danh sách trở lại file def write_tasks(tasks): with open(filename, mode='w', encoding='utf-8', newline='') as file: writer = csv.DictWriter(file, fieldnames=["Task", "Status"]) writer.writeheader() for task in tasks: writer.writerow(task) # Đánh dấu công việc hoàn thành def mark_done(tasks): print("\n📋 Danh sách công việc:") for i, task in enumerate(tasks): status = "✅" if task["Status"].lower() == "done" else "🔄" print(f"{i + 1}. {task['Task']} [{status}]") try: choice = int(input("Nhập số thứ tự công việc muốn đánh dấu hoàn thành: ")) if 1 <= choice <= len(tasks): tasks[choice - 1]["Status"] = "Done" write_tasks(tasks) print("🎉 Đã cập nhật trạng thái công việc!") else: print("⚠️ Lựa chọn không hợp lệ.") except: print("⚠️ Vui lòng nhập một số hợp lệ.") # Chạy chương trình def main(): tasks = read_tasks() mark_done(tasks) if __name__ == "__main__": main()
🧾 Kết quả mong đợi
Sau khi chạy và đánh dấu, file tasks.csv sẽ được cập nhật, ví dụ:
Task,Status Chao co,Done Post Fanpage,Done Post Group,Pending
✅ Bài tập
- Thử chạy code và đánh dấu một công việc.
- Tạo thêm công việc mới trong file CSV và kiểm tra lại.
- (Nâng cao) Gợi ý: Thêm lựa chọn xóa task, lọc theo trạng thái.
💬 Gợi ý mở rộng
- Hiển thị màu sắc trạng thái trong terminal (dùng thư viện colorama).
- Giao diện GUI đơn giản với Tkinter hoặc PyQt sau này.
📌 Hãy commit thành quả vào GitHub hoặc lưu lại để tiếp tục vào Ngày 33 nhé!