🐍 Ngày 29- Python hằng ngày 365 ngày - Lưu và Tải Dữ Liệu với JSON – Quản lý To-Do List với json
Trong ngày này, chúc ta sẽ nâng cấp ứng dụng To-Do List để lưu công việc vào file data.json
và tự động tải lại danh sách khi mở ứng dụng. Đây là bước đầu giúp chương trình có tính lưu trữ lâu dài.
🧠 Mục tiêu:
- Biết sử dụng
json
để lưu và tải dữ liệu. - Tự động lưu danh sách sau mỗi thay đổi.
- Tự động tải dữ liệu khi khởi động chương trình.
✍️ Code todo_day29.py
import json
import os
# --- CẤU TRÚC Dữ LIỆU ---
tasks = []
# --- FILE LƯU TRỨ ---
DATA_FILE = "data.json"
# --- TẢI Dữ LIỆU ---
def load_tasks():
global tasks
if os.path.exists(DATA_FILE):
with open(DATA_FILE, "r", encoding="utf-8") as f:
tasks = json.load(f)
else:
tasks = []
# --- LƯU Dữ LIỆU ---
def save_tasks():
with open(DATA_FILE, "w", encoding="utf-8") as f:
json.dump(tasks, f, indent=4, ensure_ascii=False)
# --- CÁC HÀM CHỨC NĂNG ---
def display_menu():
print("\n----- MENU TO-DO LIST -----")
print("1. Thêm công việc mới")
print("2. Xem danh sách công việc")
print("3. Đánh dấu hoàn thành")
print("4. Xóa công việc")
print("5. Thoát")
print("---------------------------")
def addTask(tasks_list):
task_name = input("Nhập tên công việc: ")
tasks_list.append({"name": task_name, "done": False})
save_tasks()
print("✅ Đã thêm công việc.")
def viewTasks(tasks_list):
if not tasks_list:
print("📬 Không có công việc nào.")
return
print("\n📋 DANH SÁCH CÔNG VIỆC:")
for i, task in enumerate(tasks_list, 1):
status = "✅" if task["done"] else "❌"
print(f"{i}. [{status}] {task['name']}")
def markComplete(tasks_list):
viewTasks(tasks_list)
try:
idx = int(input("Nhập số công việc đã hoàn thành: "))
tasks_list[idx - 1]["done"] = True
save_tasks()
print("🎉 Đã đánh dấu hoàn thành.")
except:
print("⚠️ Số không hợp lệ.")
def deleteTask(tasks_list):
viewTasks(tasks_list)
try:
idx_del = int(input("Nhập số công việc muốn xóa: "))
removed = tasks_list.pop(idx_del - 1)
save_tasks()
print(f"🗑️ Đã xóa: {removed['name']}")
except:
print("⚠️ Không hợp lệ.")
# --- CHẠY CHƯƠNG TRÌNH ---
def main():
load_tasks()
while True:
display_menu()
choice = input("Chọn (1-5): ")
if choice == '1':
addTask(tasks)
elif choice == '2':
viewTasks(tasks)
elif choice == '3':
markComplete(tasks)
elif choice == '4':
deleteTask(tasks)
elif choice == '5':
print("👋 Hẹn gặp lại!")
break
else:
print("❌ Lựa chọn không hợp lệ!")
if __name__ == "__main__":
main()
✅ Kết quả mong đợi
- Bạn có thể thêm, xem, đánh dấu hoàn thành hoặc xóa công việc.
- Khi thoát và mở lại chương trình, danh sách công việc vẫn được giữ nguyên nhờ file
data.json
.
💪 Thử thách:
- Hiển thị tổng số công việc và số đã hoàn thành.
- Thêm ngày tạo cho mỗi công việc.
- Tạo file
backup_data.json
trước khi thóat.
Chúc bạn quản lý công việc ngày một tốt hơn! 🌟