Skip to main content

🐍 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

· 3 min read

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.jsontự độ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:

  1. Hiển thị tổng số công việc và số đã hoàn thành.
  2. Thêm ngày tạo cho mỗi công việc.
  3. 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! 🌟