用于序列化的模块
- json,通用的序列化方式,序列化成为str类型,支持所有语言识别,序列化的数据具有局限性。
- pickle,python的所有数据类型都可以被序列化,序列化为bites格式,只适用于python之间的数据交互。
json和pickle都支持四个功能:load,loads,dump,dumps.
可以根据下面的代码来看四个功能到底如何实现:
# Author:Zhang Zhao #json序列化实现 import json data = {'name':'zhangzhao','age':18} with open('zz.text','w') as f: f.write(json.dumps(data))# 等价于json.dump(data,f) #将data内的数据序列化成为str类型,然后写到zz.text里面
# Author:Zhang Zhao #json反序列化实现 import json with open('zz.text','r') as f: data = json.loads(f.read())# 等价于json.load(f) #将zz.text里json序列化的数据转换成为原来的字典数据类型。 print(data,type(data)) {'name': 'zhangzhao', 'age': 18} <class 'dict'>
下面是利用json序列化实现简单的用户注册,实现用户登录,并且当输入次数大于三次时便会锁定。(本来输入密码想用getpass,但不知为何pycharm里执行getpass有点问题。。。)
可以参考Alex的博客学习python数据类型。
# Author:Zhang Zhao import getpass, json with open('data.text', 'r') as f: # data = eval(json.load(f)) data = json.loads(f.read()) choice = input('注册还是登录:').strip() count = 0 while True: if choice == '注册': username = input('请输入用户名:') if username.strip() in data: print('用户名已存在,请换一个') else: pwd = input('请输入密码:') data[username] = pwd print('注册成功') with open('data.text', 'w') as f: f.write(json.dumps(data)) break elif choice == '登录': username = input('请输入用户名:') pwd = input('请输入密码:') if pwd == data.get(username): print('验证成功') break else: print('用户名或密码错误') count += 1 if count > 3: print('输入错误次数太多,滚') break else: break