'''
序列化与反序列化
按照某种规则,把内存中的数据保存到文件中,文件是一个字节序列,所以必须要把内存数据转换成为字节序列,输出到文件,这就是序列化;
反之,从文件的字节恢复到内存,就是反序列化;
'''
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__
评论
评论功能已经关闭!