Thực hành tích hợp đọc ghi JSON vào chương trình
B1. Tạo file data.json và thêm dữ liệu (từ sample project).
B2. Tạo file data_io.py để viết hàm đọc ghi file
import json
def load_json_data():
"""
Đọc dữ liệu
"""
anime_dict_data = list()
with open("data/data.json", "r") as json_in:
json_data = json.load(json_in)
anime_dict_data.extend(json_data)
return anime_dict_data
def write_json_data(json_data):
"""
Viết dữ liệu
"""
with open("data/data.json", "w") as json_out:
json.dump(json_data, json_out)
Hàm load_json_data() đọc dữ liệu từ file json và trả về dạng danh sách.
Hàm write_json_data() nhận vào dữ liệu và viết dữ liệu đó vào file data.json. Khi có các thao tác thêm, xóa, sửa thì sẽ gọi hàm này.
B3: Đặt lại tên lớp quản lý từ AnimeList sang AnimeDatabase, thêm vào các câu
Thực hành tích hợp đọc ghi JSON vào chương trình B1. Tạo file data.json và thêm dữ liệu (từ sample project). B2. Tạo file data_io.py để viết hàm đọc ghi file import json
def load_json_data(): """ Đọc dữ liệu """ anime_dict_data = list() with open("data/data.json", "r") as json_in: json_data = json.load(json_in) anime_dict_data.extend(json_data) return anime_dict_data
def write_json_data(json_data): """ Viết dữ liệu """ with open("data/data.json", "w") as json_out: json.dump(json_data, json_out)
B3: Đặt lại tên lớp quản lý từ AnimeList sang AnimeDatabase, thêm vào các câu lệnh có sử dụng đọc ghi file. from data import data_io
class AnimeDatabase: def __init__(self): # Tạo danh sách chứa các đối tượng AnimeItem self.anime_item_list = list() # Đọc dữ liệu khi khởi tạo self.anime_dict_data = data_io.load_json_data()
def load_data(self): """ Phương thức chuyển đổi dữ liệu đã READ vào danh sách đối tượng """ for anime_dict in self.anime_dict_data: anime = AnimeItem(anime_id=anime_dict["id"], title=anime_dict["title"], release_date=anime_dict["release_date"], image=anime_dict["image"], link=anime_dict["link"]) self.anime_item_list.append(anime)
def items_to_data(self): """ Phương thức chuyển đổi danh sách đối tượng sang dữ liệu json """ json_data = list() for anime in self.anime_item_list: json_data.append(anime.__dict__) return json_data
def get_first_item_by_title(self, anime_title): """ Trả về đối tượng AnimeItem có title là anime_title """ for anime_item in self.anime_item_list: # Tìm thấy if anime_item.title == anime_title: return anime_item # Không tìm thấy return False
def add_item(self, anime_dict): """ Phương thức thêm một đối tượng AnimeItem mới """ # Tạo đối tượng anime_dict["id"] = len(self.anime_item_list) new_item= AnimeItem(anime_id=anime_dict["id"], title=anime_dict["title"], release_date=anime_dict["release_date"], image=anime_dict["image"], rating=anime_dict["rating"], link=anime_dict["link"]) # Thêm vào danh sách phần tử self.anime_item_list.append(new_item) # Thực hiện WRITE mỗi khi thay đổi danh sách đối tượng self.anime_dict_data.append(anime_dict) data_io.write_json_data(self.anime_dict_data)
def edit_item(self, edit_title, new_dict): """ Phương thức sửa một đối tượng AnimeItem có title là edit_title """ # Tìm đối tượng matched = self.get_first_item_by_title(edit_title) # Sửa đối tượng if matched: matched.update(new_dict) # Thực hiện WRITE mỗi khi thay đổi danh sách đối tượng self.anime_dict_data = self.items_to_data() data_io.write_json_data(self.anime_dict_data)
def delete_item(self, delete_title): """ Phương thức xoá đối tượng AnimeItem có title là delete_title """ matched = self.get_first_item_by_title(delete_title) if matched: self.anime_item_list.remove(matched) # Thực hiện WRITE mỗi khi thay đổi danh sách đối tượng self.anime_dict_data = self.items_to_data() data_io.write_json_data(self.anime_dict_data)
| |
Bước 1: Tạo dữ liệu mẫu ban đầu (1, 2 ví dụ) và ghi vào prompt
Bước 2: ChatGPT sẽ tạo các dữ liệu còn lại theo hướng dẫn
|