Skip to Content

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

🐍 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ẽ:

  1. Đọc danh sách công việc từ file CSV (tasks.csv).
  2. Hiển thị danh sách cho người dùng chọn.
  3. Cho phép đánh dấu 1 task là "Done".
  4. 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()

📺 Video hướng dẫn

Trong video này, bạn sẽ học cách đánh dấu công việc hoàn thành trong file CSV bằng Python. Hãy cùng luyện tập và nâng cấp kỹ năng mỗi ngày! 🐍✅

🎬 Video hướng dẫn trên TikTok: Python To-Do List

Xem video ngắn hướng dẫn cách đánh dấu task đã hoàn thành bằng Python và file CSV. Phù hợp cho người mới bắt đầu học lập trình hàng ngày! 🐍💡


🧾 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

  1. Thử chạy code và đánh dấu một công việc.
  2. Tạo thêm công việc mới trong file CSV và kiểm tra lại.
  3. (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é!

/* Tối ưu font, khoảng cách và màu chủ đạo */ body { font-family: 'Inter', sans-serif; color: #2e3a59; } h1, h2, h3 { color: #2a7a4d; /* màu xanh giống Docusaurus */ font-weight: 700; } a { color: #2a7a4d; text-decoration: none; } a:hover { text-decoration: underline; } /* Bo tròn và đổ bóng cho khối nội dung */ .card, .oe_structure { border-radius: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.05); padding: 1.5rem; }