🐍 Ngày 30 - Python hằng ngày 365 ngày - Làm việc với File CSV trong Python
📘 Python To-Do List App với CSV
📝 Mục tiêu
- Quản lý danh sách công việc sử dụng Python và lưu trữ bằng file .csv
- Cho phép người dùng xem, thêm và lưu công việc
📁 File CSV đầu vào (tasks.csv)
Task,Status Post Fanpage,Done Post Group,Pending
🔧 Mã nguồn Python đầy đủ
import csv import os CSV_FILE = "todo_tasks.csv" def load_tasks(): tasks = [] if os.path.exists(CSV_FILE): with open(CSV_FILE, newline='', encoding='utf-8') as csvfile: reader = csv.DictReader(csvfile) for row in reader: status = row["Status"].strip().lower() tasks.append({ "Task": row["Task"], "completed": status in ["done", "completed", "true"] }) return tasks def save_tasks(tasks): with open(CSV_FILE, "w", newline='', encoding='utf-8') as csvfile: fieldnames = ["Task", "Status"] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() for task in tasks: status = "Done" if task["completed"] else "Pending" writer.writerow({"Task": task["Task"], "Status": status}) def show_tasks(tasks): print("\n📋 Danh sách công việc:") for idx, task in enumerate(tasks, 1): status = "✅" if task["completed"] else "⏳" print(f"{idx}. {task['Task']} {status}") def add_task(tasks): new_task = input("🔹 Nhập tên công việc mới: ") tasks.append({"Task": new_task, "completed": False}) print("✅ Đã thêm công việc mới.") def main(): tasks = load_tasks() while True: print("\n----- MENU -----") print("1. Xem danh sách công việc") print("2. Thêm công việc mới") print("3. Thoát") choice = input("Chọn một tùy chọn: ") if choice == "1": show_tasks(tasks) elif choice == "2": add_task(tasks) save_tasks(tasks) elif choice == "3": print("👋 Tạm biệt!") break else: print("❌ Lựa chọn không hợp lệ. Vui lòng thử lại.") if __name__ == "__main__": main()
💡 Mở rộng đề xuất
- Đánh dấu hoàn thành công việc
- Xóa công việc
- Sắp xếp danh sách theo trạng thái hoặc thời gian tạo