对象序列化
什么是对象序列化? 列表、字典、集合和元组都是抽象的概念,需要把对象持久化操作,所以需要序列化 是把对象这种抽象的概念持久化到磁盘上,换句话说就是将对象转为字节和字符
1.pickle
将对象转化为字节数据
>>> import pickle
>>> dir(pickle)
dumps ------ 将对象序列化为字节数据
>>> ls = [1,2,3,4,5]
>>> data = pickle.dumps(ls)
>>> data b'\x80\x04\x95\x0f\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02K\x03K\x04K\x05e.'
>>> f = open("a.dat","wb")
>>> f.write(data)
26
>>> f.close()
loads ------ 将字节数据反序列化为对象
>>> f = open("a.dat","rb")
>>> show = f.read()
>>> show b'\x80\x04\x95\x0f\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02K\x03K\x04K\x05e.'
>>> show = pickle.loads(show)
>>> show
[1, 2, 3, 4, 5]
dump ------ 将对象序列化为字节数据并且保存到file中
>>> ls
[1, 2, 3, 4, 5]
>>> pickle.dump(ls,open("b.dat","wb"))
load -------- 将file字节数据反序列化为对象
>>> pickle.load(open("b.dat","rb"))
[1, 2, 3, 4, 5]
2.json
将对象序列化为字符数据 import json dir(json) ------- 查看模块里面的方法 dumps loads dump load
>>> d = {"usename":"zhangsan","age":18}
>>> type(d)
<class 'dict'>
>>> json.dumps(d)
'{"usename": "zhangsan", "age": 18}'
>>> s = json.dumps(d)
>>> f = open("a.txt","w")
>>> f.write(s)
34
>>> f.close()
>>> f = open("a.txt","r")
>>> ss = f.read()
>>> ss
'{"usename": "zhangsan", "age": 18}'
>>> json.loads(ss)
{'usename': 'zhangsan', 'age': 18}
>>> dd = json.loads(ss)
>>> dd
{'usename': 'zhangsan', 'age': 18}
>>> type(dd)
<class 'dict'>
注意:json模块一般是用来序列化字典对象 练习:将登录注册操作进行序列化操作
user["password"] = password_md5(password)
users.append(user)
print(users)
print("开始保存用户")
save_data()
def exits_user(username):
for i in users:
if i.get("username") ==username:
return True
return False
def is_login(username,password):
for i in users:
if i.get("username") == username and i.get("password")==password:
print("登录成功")
return True
return False
def login():
username = input("输入用户名:")
password = input("输入用户密码:")
password = password_md5(password)
if is_login(username,password):
print("恭喜你登录成功")
else:
print("对不起,登录失败,请重新登录")
init()
while True:
choice = main()
if choice == "1":
print("用户注册")
register()
elif choice == "2":
print("用户登录")
login()
elif choice == "3":
print("显示所有用户")
print(users)
else:
print("程序正常退出")
sys.exit(0)
|