json&pickle数据序列化模块

用于序列化的模块

  • 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
View Code