''' 序列化与反序列化 按照某种规则,把内存中的数据保存到文件中,文件是一个字节序列,所以必须要把内存数据转换成为字节序列,输出到文件,这就是序列化; 反之,从文件的字节恢复到内存,就是反序列化; ''' from json import dump,load import os import random from model.User import User,MyEncoder filepath = os.path.join(os.getcwd(), "assets\c3.json") fp = open(filepath, 'w+') userlist = [] for i in range(1, 10): u = User('', random.randint(15, 60)) u.randName(random.randint(5, 10)) userlist.append(u) #序列化 dump(userlist, fp, cls=MyEncoder) fp.close() #反序列化 fp = open(filepath, 'r') ul = load(fp) print(ul) # User, MyEncoder import os import sys print(os.path.dirname(os.getcwd())) sys.path.insert(0, os.path.dirname(os.getcwd())) import json import random from decorator.Logger import Logger class User: '''用户模型''' def __init__(self, name = '', age = 0): self.name = name self.age = age @property def Gender(self): return self.gender @Gender.setter def Gender(self, g: int): ''' :g int 1=男,2=女 ''' if g not in [1, 2]: raise ValueError("Gender Value is not a valid") self.gender = g def getGenderText(self): genderDic = { 1: '男', 2: '女' } return genderDic[self.gender] @Logger() def intro(self): '''自我介绍''' print("My name is {}, My age is {}, My gender is {}".format(self.name, self.age, self.getGenderText())) def randName(self, len: int = 5): """ 根据传入的数字生成对应长度的随机字符串 Parameters: len - 待生成的字符串长度 Returns: None Raises: None """ str = 'abcdefghijklmnopqrstuvwxyz' name = '' for i in range(len): idx = random.randint(0, 25) s = str[idx] if name == '': s = s.upper() name += s self.name = name def toJSON(self): return json.dumps(self, default=lambda o: o.__dict__, sort_keys=True, indent=4) class MyEncoder(json.JSONEncoder): def default(self, o): return o.__dict__
评论
评论功能已经关闭!